pub struct InlineContent(pub FileContent);Expand description
Inline content source type.
Represents content that is embedded directly in the archive.
§Examples
use genfile_core::{ InlineContent, FileContent };
let source = InlineContent::new( FileContent::Text( "Hello {{name}}".into() ) );
let source = InlineContent( FileContent::Text( "Hello {{name}}".into() ) );Tuple Fields§
§0: FileContentImplementations§
Source§impl InlineContent
impl InlineContent
Sourcepub fn new(content: FileContent) -> Self
pub fn new(content: FileContent) -> Self
Create a new inline content source
Examples found in repository?
examples/external_content.rs (line 34)
23fn main() -> Result< (), Box< dyn core::error::Error > >
24{
25 println!( "=== External Content Sources Example ===" );
26 println!();
27
28 // Create archive
29 let mut archive = TemplateArchive::new( "docs" );
30
31 // Add file with inline content (normal way)
32 archive.add_file_from(
33 PathBuf::from( "inline.txt" ),
34 InlineContent::new( FileContent::Text( "This is inline content".into() ) ),
35 WriteMode::Rewrite
36 );
37
38 // Add file referencing external file
39 archive.add_file_from(
40 PathBuf::from( "external_header.txt" ),
41 FileRef::new( PathBuf::from( "/templates/header.hbs" ) ),
42 WriteMode::Rewrite
43 );
44
45 archive.add_file_from(
46 PathBuf::from( "external_footer.txt" ),
47 FileRef::new( PathBuf::from( "/templates/footer.hbs" ) ),
48 WriteMode::Rewrite
49 );
50
51 println!( "Archive with mixed content sources:" );
52 println!( " Total files: {}", archive.file_count() );
53 println!();
54
55 // === Internalization Example ===
56
57 println!( "=== Internalization (fetch and embed) ===" );
58 println!();
59
60 // Create a mock filesystem with template content
61 let mut mock_fs = MemoryFileSystem::new();
62 mock_fs.write(
63 &PathBuf::from( "/templates/header.hbs" ),
64 "=== {{title}} ===\n"
65 )?;
66 mock_fs.write(
67 &PathBuf::from( "/templates/footer.hbs" ),
68 "© {{year}} {{author}}\n"
69 )?;
70
71 // Create resolver that can fetch from our mock filesystem
72 let _resolver = DefaultContentResolver::new();
73
74 // Note: DefaultContentResolver doesnt support actual file fetching,
75 // but demonstrates the API. In real usage, implement custom ContentResolver
76 // that reads from disk, HTTP, database, etc.
77
78 println!( "To internalize external content:" );
79 println!( " let resolver = CustomContentResolver::new();" );
80 println!( " archive.internalize( &resolver )?;" );
81 println!();
82 println!( "This fetches all external content and embeds it in the archive." );
83 println!();
84
85 // === Externalization Example ===
86
87 println!( "=== Externalization (extract to files) ===" );
88 println!();
89
90 // Create archive with inline content
91 let mut inline_archive = TemplateArchive::new( "app" );
92 inline_archive.add_text_file(
93 PathBuf::from( "config.txt" ),
94 "app={{app_name}}\nversion={{version}}\n",
95 WriteMode::Rewrite
96 );
97 inline_archive.add_text_file(
98 PathBuf::from( "readme.txt" ),
99 "# {{app_name}}\n",
100 WriteMode::Rewrite
101 );
102
103 println!( "Archive before externalization:" );
104 println!( " Total files: {}", inline_archive.file_count() );
105 println!();
106
107 // Externalize would extract inline content to separate files
108 println!( "To externalize inline content:" );
109 println!( " let storage = CustomContentStorage::new();" );
110 println!( " archive.externalize( &storage, Path::new( \"/templates\" ) )?;" );
111 println!();
112 println!( "This extracts inline content to external files and updates references." );
113 println!();
114
115 // === Serialization with External Sources ===
116
117 println!( "=== Serialization ===" );
118 println!();
119
120 let json = archive.to_json_pretty()?;
121 println!( "JSON with external sources (first 600 chars):" );
122 let json_preview: String = json.chars().take( 600 ).collect();
123 println!( "{json_preview}" );
124 println!( "..." );
125 println!();
126
127 println!( "External file references are preserved in serialization." );
128 println!( "FileRef stores the path, not the content." );
129 println!();
130
131 // === Materialization ===
132
133 println!( "=== Materialization ===" );
134 println!();
135
136 // For demonstration, use inline content version
137 let mut demo_archive = TemplateArchive::new( "demo" );
138 demo_archive.add_text_file(
139 PathBuf::from( "output.txt" ),
140 "Title: {{title}}\nAuthor: {{author}}\nYear: {{year}}\n",
141 WriteMode::Rewrite
142 );
143
144 demo_archive.set_value( "title", Value::String( "External Content Guide".into() ) );
145 demo_archive.set_value( "author", Value::String( "genfile_core".into() ) );
146 demo_archive.set_value( "year", Value::Number( 2024 ) );
147
148 let renderer = HandlebarsRenderer::new();
149 let mut fs = MemoryFileSystem::new();
150
151 demo_archive.materialize_with_components(
152 PathBuf::from( "/output" ).as_path(),
153 &renderer,
154 &mut fs
155 )?;
156
157 let content = fs.read( &PathBuf::from( "/output/output.txt" ) )?;
158 println!( "Generated content:" );
159 println!( "{content}" );
160 println!();
161
162 println!( "✅ Example completed successfully" );
163
164 Ok( () )
165}Trait Implementations§
Source§impl Clone for InlineContent
impl Clone for InlineContent
Source§fn clone(&self) -> InlineContent
fn clone(&self) -> InlineContent
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for InlineContent
impl Debug for InlineContent
Source§impl From<FileContent> for InlineContent
impl From<FileContent> for InlineContent
Source§fn from(content: FileContent) -> Self
fn from(content: FileContent) -> Self
Converts to this type from the input type.
Source§impl IntoContentSource for InlineContent
impl IntoContentSource for InlineContent
Source§fn into_content_source(self) -> ContentSource
fn into_content_source(self) -> ContentSource
Convert self into a
ContentSourceAuto Trait Implementations§
impl Freeze for InlineContent
impl RefUnwindSafe for InlineContent
impl Send for InlineContent
impl Sync for InlineContent
impl Unpin for InlineContent
impl UnwindSafe for InlineContent
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more