@@ -12,6 +12,7 @@ mod options;
1212
1313pub use error:: HtmlRenderError ;
1414pub use options:: { HtmlRenderOptions , Theme } ;
15+ pub use relune_render_svg:: SvgArtifact ;
1516
1617use relune_layout:: LayoutGraph ;
1718
@@ -20,15 +21,15 @@ use relune_layout::LayoutGraph;
2021/// # Arguments
2122///
2223/// * `graph` - The layout graph containing node/edge/group information
23- /// * `svg` - Pre-rendered SVG content to embed
24+ /// * `svg` - Pre-rendered SVG produced by [`relune_render_svg`]
2425/// * `options` - HTML rendering options
2526///
2627/// # Returns
2728///
2829/// A complete, self-contained HTML document string.
2930pub fn render_html (
3031 graph : & LayoutGraph ,
31- svg : & str ,
32+ svg : & SvgArtifact ,
3233 options : & HtmlRenderOptions ,
3334) -> Result < String , HtmlRenderError > {
3435 render_html_with_overlay ( graph, svg, options, None )
@@ -40,15 +41,15 @@ pub fn render_html(
4041/// so that client-side scripts can display lint warnings, diff status, etc.
4142pub fn render_html_with_overlay (
4243 graph : & LayoutGraph ,
43- svg : & str ,
44+ svg : & SvgArtifact ,
4445 options : & HtmlRenderOptions ,
4546 overlay : Option < & relune_layout:: DiagramOverlay > ,
4647) -> Result < String , HtmlRenderError > {
4748 let metadata = metadata:: build_metadata_with_overlay ( graph, overlay) ;
4849 let metadata_json = serde_json:: to_string ( & metadata) ?;
4950 let escaped_metadata = html:: escape_json_for_script ( & metadata_json) ;
5051
51- let html_document = html:: build_html_document ( svg, & escaped_metadata, options) ;
52+ let html_document = html:: build_html_document ( svg. as_str ( ) , & escaped_metadata, options) ;
5253
5354 Ok ( html_document)
5455}
@@ -151,12 +152,15 @@ mod tests {
151152 }
152153 }
153154
154- fn create_test_svg ( ) -> & ' static str {
155- r#"<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 432 400">
155+ fn create_test_svg ( ) -> SvgArtifact {
156+ SvgArtifact :: from_trusted (
157+ r#"<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 432 400">
156158 <g class="node" data-id="users"><rect x="56" y="56" width="260" height="94"/></g>
157159 <g class="node" data-id="posts"><rect x="56" y="230" width="260" height="112"/></g>
158160 <g class="edge"><line x1="316" y1="286" x2="56" y2="103"/></g>
159161</svg>"#
162+ . to_string ( ) ,
163+ )
160164 }
161165
162166 #[ test]
@@ -165,7 +169,7 @@ mod tests {
165169 let svg = create_test_svg ( ) ;
166170 let options = HtmlRenderOptions :: default ( ) ;
167171
168- let result = render_html ( & graph, svg, & options) . unwrap ( ) ;
172+ let result = render_html ( & graph, & svg, & options) . unwrap ( ) ;
169173
170174 assert ! ( result. contains( "<!DOCTYPE html>" ) ) ;
171175 assert ! ( result. contains( "<html" ) ) ;
@@ -180,7 +184,7 @@ mod tests {
180184 let svg = create_test_svg ( ) ;
181185 let options = HtmlRenderOptions :: default ( ) ;
182186
183- let result = render_html ( & graph, svg, & options) . unwrap ( ) ;
187+ let result = render_html ( & graph, & svg, & options) . unwrap ( ) ;
184188
185189 assert ! ( result. contains( r#"<svg xmlns="http://www.w3.org/2000/svg""# ) ) ;
186190 assert ! ( result. contains( r#"data-id="users""# ) ) ;
@@ -193,7 +197,7 @@ mod tests {
193197 let svg = create_test_svg ( ) ;
194198 let options = HtmlRenderOptions :: default ( ) ;
195199
196- let result = render_html ( & graph, svg, & options) . unwrap ( ) ;
200+ let result = render_html ( & graph, & svg, & options) . unwrap ( ) ;
197201
198202 assert ! ( result. contains( r#"id="relune-metadata""# ) ) ;
199203 assert ! ( result. contains( r#""tables""# ) ) ;
@@ -211,7 +215,7 @@ mod tests {
211215 ..Default :: default ( )
212216 } ;
213217
214- let result = render_html ( & graph, svg, & options) . unwrap ( ) ;
218+ let result = render_html ( & graph, & svg, & options) . unwrap ( ) ;
215219
216220 assert ! ( result. contains( "<title>My Schema ERD</title>" ) ) ;
217221 assert ! ( result. contains( "<h1>My Schema ERD</h1>" ) ) ;
@@ -226,7 +230,7 @@ mod tests {
226230 ..Default :: default ( )
227231 } ;
228232
229- let result = render_html ( & graph, svg, & options) . unwrap ( ) ;
233+ let result = render_html ( & graph, & svg, & options) . unwrap ( ) ;
230234
231235 assert ! ( result. contains( "--bg-color: #0c0f1a" ) ) ;
232236 assert ! ( result. contains( "--text-color: #e2e8f0" ) ) ;
@@ -241,7 +245,7 @@ mod tests {
241245 ..Default :: default ( )
242246 } ;
243247
244- let result = render_html ( & graph, svg, & options) . unwrap ( ) ;
248+ let result = render_html ( & graph, & svg, & options) . unwrap ( ) ;
245249
246250 assert ! ( result. contains( "--bg-color: #f7f8fc" ) ) ;
247251 assert ! ( result. contains( "--text-color: #1e293b" ) ) ;
@@ -253,7 +257,7 @@ mod tests {
253257 let svg = create_test_svg ( ) ;
254258 let options = HtmlRenderOptions :: default ( ) ;
255259
256- let result = render_html ( & graph, svg, & options) . unwrap ( ) ;
260+ let result = render_html ( & graph, & svg, & options) . unwrap ( ) ;
257261
258262 assert ! ( result. contains( "updateTransform" ) ) ;
259263 assert ! ( result. contains( "addEventListener" ) ) ;
@@ -265,7 +269,7 @@ mod tests {
265269 let svg = create_test_svg ( ) ;
266270 let options = HtmlRenderOptions :: default ( ) ;
267271
268- let result = render_html ( & graph, svg, & options) . unwrap ( ) ;
272+ let result = render_html ( & graph, & svg, & options) . unwrap ( ) ;
269273
270274 // Should not reference external HTTP resources
271275 assert ! ( result. contains( "<link" ) ) ;
@@ -279,7 +283,7 @@ mod tests {
279283 let svg = create_test_svg ( ) ;
280284 let options = HtmlRenderOptions :: default ( ) ;
281285
282- let result = render_html ( & graph, svg, & options) . unwrap ( ) ;
286+ let result = render_html ( & graph, & svg, & options) . unwrap ( ) ;
283287
284288 // Check metadata contains expected structure
285289 assert ! ( result. contains( r#""id":"users""# ) ) ;
@@ -350,12 +354,15 @@ mod tests {
350354 node_index : std:: collections:: BTreeMap :: new ( ) ,
351355 reverse_index : std:: collections:: BTreeMap :: new ( ) ,
352356 } ;
353- let svg = r#"<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 432 400">
357+ let svg = SvgArtifact :: from_trusted (
358+ r#"<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 432 400">
354359 <g class="table-node node node-kind-view" data-table-id="active_users" data-id="active_users" data-node-kind="view"></g>
355360 <g class="table-node node node-kind-enum" data-table-id="status" data-id="status" data-node-kind="enum"></g>
356- </svg>"# ;
361+ </svg>"#
362+ . to_string ( ) ,
363+ ) ;
357364
358- let result = render_html ( & graph, svg, & HtmlRenderOptions :: default ( ) ) . unwrap ( ) ;
365+ let result = render_html ( & graph, & svg, & HtmlRenderOptions :: default ( ) ) . unwrap ( ) ;
359366
360367 assert ! ( result. contains( r#""kind":"view""# ) ) ;
361368 assert ! ( result. contains( r#""kind":"enum""# ) ) ;
0 commit comments