noosphere_into/transform/
transform_implementation.rs

1use noosphere_core::context::HasSphereContext;
2use noosphere_storage::Storage;
3
4use crate::{Resolver, SphereContentTranscluder, StaticHtmlResolver, Transcluder};
5
6/// A [Transform] represents the combination of a [Resolver] and a
7/// [Transcluder]. Together these elements form a transformation over
8/// some input Noosphere content.
9pub trait Transform: Clone {
10    type Resolver: Resolver;
11    type Transcluder: Transcluder;
12
13    fn resolver(&self) -> &Self::Resolver;
14    fn transcluder(&self) -> &Self::Transcluder;
15}
16
17/// A [Transform] that is suitable for converting Noosphere content to
18/// HTML for a basic state website generator.
19#[derive(Clone)]
20pub struct StaticHtmlTransform<R, S>
21where
22    R: HasSphereContext<S> + Clone,
23    S: Storage + 'static,
24{
25    pub resolver: StaticHtmlResolver,
26    pub transcluder: SphereContentTranscluder<R, S>,
27}
28
29impl<R, S> StaticHtmlTransform<R, S>
30where
31    R: HasSphereContext<S> + Clone,
32    S: Storage + 'static,
33{
34    pub fn new(content: R) -> Self {
35        StaticHtmlTransform {
36            resolver: StaticHtmlResolver(),
37            transcluder: SphereContentTranscluder::new(content),
38        }
39    }
40}
41
42impl<R, S> Transform for StaticHtmlTransform<R, S>
43where
44    R: HasSphereContext<S> + Clone,
45    S: Storage + 'static,
46{
47    type Resolver = StaticHtmlResolver;
48
49    type Transcluder = SphereContentTranscluder<R, S>;
50
51    fn resolver(&self) -> &Self::Resolver {
52        &self.resolver
53    }
54
55    fn transcluder(&self) -> &Self::Transcluder {
56        &self.transcluder
57    }
58}