typst_library/loading/
read.rs1use ecow::EcoString;
2use typst_syntax::Spanned;
3
4use crate::diag::{At, FileError, SourceResult};
5use crate::engine::Engine;
6use crate::foundations::{func, Cast};
7use crate::loading::Readable;
8use crate::World;
9
10#[func]
26pub fn read(
27 engine: &mut Engine,
28 path: Spanned<EcoString>,
32 #[named]
36 #[default(Some(Encoding::Utf8))]
37 encoding: Option<Encoding>,
38) -> SourceResult<Readable> {
39 let Spanned { v: path, span } = path;
40 let id = span.resolve_path(&path).at(span)?;
41 let data = engine.world.file(id).at(span)?;
42 Ok(match encoding {
43 None => Readable::Bytes(data),
44 Some(Encoding::Utf8) => {
45 Readable::Str(data.to_str().map_err(FileError::from).at(span)?)
46 }
47 })
48}
49
50#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash, Cast)]
52pub enum Encoding {
53 Utf8,
55}