diff --git a/src/core/addresses.rs b/src/core/addresses.rs
index e69de29..4f57988 100644
--- a/src/core/addresses.rs
+++ b/src/core/addresses.rs
@@ -0,0 +1,66 @@
+use super::*;
+
+/// Preferred way to parse [Point]s off of a [Serializer].
+pub struct Addresses {
+ current: usize,
+}
+
+impl Addresses {
+ /// Read the next [Address].
+ pub fn next<'a>(
+ &mut self,
+ deserializer: &'a mut dyn Deserializer,
+ ) -> Result
{
+ let point = deserializer.read_n_const::()?;
+ let address = Address {
+ point,
+ index: self.current,
+ };
+ self.current += 1;
+ Ok(address)
+ }
+
+ /// Read the next [Point].
+ pub fn next_point<'a, 'b, Ctx: 'a + Context, A: Mentionable<'a, Ctx>>(
+ &mut self,
+ deserializer: &'b mut dyn Deserializer,
+ resolver: Rc>,
+ factory: A::Fctr,
+ ) -> Result, &'b [u8]> {
+ Ok(Point::from_address(
+ self.next(deserializer)?,
+ factory,
+ resolver,
+ ))
+ }
+
+ /// Start reading the [Address]es.
+ fn start() -> Self {
+ Addresses { current: 0 }
+ }
+}
+
+fn _parse_slice<'a, Ctx: 'a + Context, A: Mentionable<'a, Ctx>>(
+ factory: &A::Fctr,
+ slice: &[u8],
+ resolver: Rc>,
+) -> ParseResult<'a, Ctx, A::Fctr> {
+ let mut deserializer = SliceDeserializer::from(slice);
+ let mentionable = factory.deserialize(&mut deserializer, resolver, &mut Addresses::start())?;
+ let tail = deserializer.read_all();
+ if tail.is_empty() {
+ Ok(mentionable)
+ } else {
+ Err(factory.unexpected_tail(tail))
+ }
+}
+
+impl<'a, Ctx: 'a + Context, F: Factory<'a, Ctx>> ExtFactory<'a, Ctx> for F {
+ fn parse_slice(
+ &self,
+ slice: &[u8],
+ resolver: Rc>,
+ ) -> ParseResult<'a, Ctx, Self> {
+ _parse_slice::(self, slice, resolver)
+ }
+}
diff --git a/src/core/hashing.rs b/src/core/hashing.rs
index 8566c24..e995f34 100644
--- a/src/core/hashing.rs
+++ b/src/core/hashing.rs
@@ -1,3 +1,6 @@
+#[cfg(doc)]
+use super::*;
+
/// Fixed [type@Hash] length.
pub const HASH_SIZE: usize = 32;
diff --git a/src/core/resolution.rs b/src/core/resolution.rs
index c051e06..9ec901d 100644
--- a/src/core/resolution.rs
+++ b/src/core/resolution.rs
@@ -40,68 +40,3 @@ pub trait Resolver<'a, Ctx: 'a + Context>: 'a {
/// with topology header ([`Mentionable::topology()`]) omitted.
fn resolve(self: Rc, address: Address) -> HashResolution<'a, Ctx>;
}
-
-/// Preferred way to parse [Point]s off of a [Serializer].
-pub struct Addresses {
- current: usize,
-}
-
-impl Addresses {
- /// Read the next [Address].
- pub fn next<'a>(
- &mut self,
- deserializer: &'a mut dyn Deserializer,
- ) -> Result {
- let point = deserializer.read_n_const::()?;
- let address = Address {
- point,
- index: self.current,
- };
- self.current += 1;
- Ok(address)
- }
-
- /// Read the next [Point].
- pub fn next_point<'a, 'b, Ctx: 'a + Context, A: Mentionable<'a, Ctx>>(
- &mut self,
- deserializer: &'b mut dyn Deserializer,
- resolver: Rc>,
- factory: A::Fctr,
- ) -> Result, &'b [u8]> {
- Ok(Point::from_address(
- self.next(deserializer)?,
- factory,
- resolver,
- ))
- }
-
- /// Start reading the [Address]es.
- fn start() -> Self {
- Addresses { current: 0 }
- }
-}
-
-fn _parse_slice<'a, Ctx: 'a + Context, A: Mentionable<'a, Ctx>>(
- factory: &A::Fctr,
- slice: &[u8],
- resolver: Rc>,
-) -> ParseResult<'a, Ctx, A::Fctr> {
- let mut deserializer = SliceDeserializer::from(slice);
- let mentionable = factory.deserialize(&mut deserializer, resolver, &mut Addresses::start())?;
- let tail = deserializer.read_all();
- if tail.is_empty() {
- Ok(mentionable)
- } else {
- Err(factory.unexpected_tail(tail))
- }
-}
-
-impl<'a, Ctx: 'a + Context, F: Factory<'a, Ctx>> ExtFactory<'a, Ctx> for F {
- fn parse_slice(
- &self,
- slice: &[u8],
- resolver: Rc>,
- ) -> ParseResult<'a, Ctx, Self> {
- _parse_slice::(self, slice, resolver)
- }
-}
diff --git a/src/core/serialization.rs b/src/core/serialization.rs
index da8a98e..aa9c051 100644
--- a/src/core/serialization.rs
+++ b/src/core/serialization.rs
@@ -1,3 +1,6 @@
+#[cfg(doc)]
+use super::*;
+
/// Serialisation mechanism that is chosen over bytestring concatenation
/// both for performance and simplicity.
///