1mod api;
4mod importer;
5
6use std::{sync::Arc, time::SystemTime};
7
8pub use api::*;
9pub use importer::*;
10
11use crate::{
12 Embedded, Exception, Importer, Options, Result, SassImporter, StringOptions,
13};
14
15impl Embedded {
16 pub fn render(&mut self, options: LegacyOptions) -> Result<LegacyResult> {
18 let start = SystemTime::now();
19 let entry = options
20 .file
21 .clone()
22 .map(|file| file.to_str().unwrap().to_string())
23 .unwrap_or_else(|| "stdin".to_string());
24 let mut options = options.adjust_options();
25 let result = if let Some(data) = options.data.clone() {
26 let this = LegacyPluginThis::new(&options);
27 let (importers, input_importer) =
28 if let Some(importers) = options.importers.take() {
29 let wrapper = LegacyImporterWrapper::new(
30 this,
31 importers,
32 options.include_paths.clone(),
33 &entry,
34 );
35 let importers = vec![SassImporter::Importer(Box::new(Arc::clone(
36 &wrapper,
37 ))
38 as Box<dyn Importer>)];
39 let input_importer = Some(SassImporter::Importer(
40 Box::new(wrapper) as Box<dyn Importer>
41 ));
42 (importers, input_importer)
43 } else {
44 (Vec::new(), None)
45 };
46 let mut options = StringOptions::from(options);
47 options.common.importers = importers;
48 options.input_importer = input_importer;
49 self.compile_string(data, options)
50 } else if let Some(file) = options.file.clone() {
51 let this = LegacyPluginThis::new(&options);
52 let importers = options
53 .importers
54 .take()
55 .map(|importers| {
56 let wrapper = LegacyImporterWrapper::new(
57 this,
58 importers,
59 options.include_paths.clone(),
60 &entry,
61 );
62 let importers = vec![SassImporter::Importer(Box::new(Arc::clone(
63 &wrapper,
64 ))
65 as Box<dyn Importer>)];
66 importers
67 })
68 .unwrap_or_default();
69 let mut options = Options::from(options);
70 options.importers = importers;
71 self.compile(file, options)
72 } else {
73 Err(
74 Exception::new("Either options.data or options.file must be set.")
75 .into(),
76 )
77 }?;
78 Ok(LegacyResult::new(
79 if entry == "stdin" {
80 "data".to_string()
81 } else {
82 entry
83 },
84 start,
85 result,
86 ))
87 }
88}