summaryrefslogtreecommitdiff
path: root/crates/typst-library/src/loading/toml.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2025-01-09 10:34:16 +0100
committerGitHub <noreply@github.com>2025-01-09 09:34:16 +0000
commite2b37fef33a92a7086790e04fb133472413c0c0a (patch)
treea2bdc638482890183414dce18f8f586786154017 /crates/typst-library/src/loading/toml.rs
parentdacd6acd5e73d35c6e7a7a3b144f16ae70d03daa (diff)
Revamp data loading and deprecate `decode` functions (#5671)
Diffstat (limited to 'crates/typst-library/src/loading/toml.rs')
-rw-r--r--crates/typst-library/src/loading/toml.rs33
1 files changed, 16 insertions, 17 deletions
diff --git a/crates/typst-library/src/loading/toml.rs b/crates/typst-library/src/loading/toml.rs
index 5167703e..e3a01cdd 100644
--- a/crates/typst-library/src/loading/toml.rs
+++ b/crates/typst-library/src/loading/toml.rs
@@ -1,11 +1,10 @@
use ecow::{eco_format, EcoString};
use typst_syntax::{is_newline, Spanned};
-use crate::diag::{At, SourceResult};
+use crate::diag::{At, FileError, SourceResult};
use crate::engine::Engine;
use crate::foundations::{func, scope, Str, Value};
-use crate::loading::Readable;
-use crate::World;
+use crate::loading::{DataSource, Load, Readable};
/// Reads structured data from a TOML file.
///
@@ -31,32 +30,32 @@ use crate::World;
pub fn toml(
/// The engine.
engine: &mut Engine,
- /// Path to a TOML file.
+ /// A path to a TOML file or raw TOML bytes.
///
- /// For more details, see the [Paths section]($syntax/#paths).
- path: Spanned<EcoString>,
+ /// For more details about paths, see the [Paths section]($syntax/#paths).
+ source: Spanned<DataSource>,
) -> SourceResult<Value> {
- let Spanned { v: path, span } = path;
- let id = span.resolve_path(&path).at(span)?;
- let data = engine.world.file(id).at(span)?;
- toml::decode(Spanned::new(Readable::Bytes(data), span))
+ let data = source.load(engine.world)?;
+ let raw = data.as_str().map_err(FileError::from).at(source.span)?;
+ ::toml::from_str(raw)
+ .map_err(|err| format_toml_error(err, raw))
+ .at(source.span)
}
#[scope]
impl toml {
/// Reads structured data from a TOML string/bytes.
+ ///
+ /// This function is deprecated. The [`toml`] function now accepts bytes
+ /// directly.
#[func(title = "Decode TOML")]
pub fn decode(
+ /// The engine.
+ engine: &mut Engine,
/// TOML data.
data: Spanned<Readable>,
) -> SourceResult<Value> {
- let Spanned { v: data, span } = data;
- let raw = std::str::from_utf8(data.as_slice())
- .map_err(|_| "file is not valid utf-8")
- .at(span)?;
- ::toml::from_str(raw)
- .map_err(|err| format_toml_error(err, raw))
- .at(span)
+ toml(engine, data.map(Readable::into_source))
}
/// Encodes structured data into a TOML string.