runmat_package/lock/
canonical.rs1use super::model::PackageLock;
2use super::validate::{canonicalized, validate_lock};
3use crate::LockError;
4
5pub fn encode_lock(lock: &PackageLock) -> Result<String, LockError> {
6 validate_lock(lock)?;
7 let canonical = canonicalized(lock.clone());
8 let mut encoded = toml::to_string(&canonical)?;
9 if !encoded.ends_with('\n') {
10 encoded.push('\n');
11 }
12 Ok(encoded)
13}
14
15pub fn decode_lock(input: &str) -> Result<PackageLock, LockError> {
16 let lock: PackageLock = toml::from_str(input)?;
17 validate_lock(&lock)?;
18 if lock != canonicalized(lock.clone()) {
19 return Err(LockError::Invalid(
20 "package and edge records are not in canonical order".to_string(),
21 ));
22 }
23 Ok(lock)
24}