mirror of
https://codeberg.org/Toasterson/ips.git
synced 2026-04-10 21:30:41 +00:00
Add serde and image starter module
Signed-off-by: Till Wegmueller <toasterson@gmail.com>
This commit is contained in:
parent
457111fc57
commit
5cea5186d7
7 changed files with 102 additions and 26 deletions
35
Cargo.lock
generated
35
Cargo.lock
generated
|
|
@ -608,6 +608,8 @@ dependencies = [
|
|||
"pest",
|
||||
"pest_derive",
|
||||
"regex",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"sha2 0.9.9",
|
||||
"sha3",
|
||||
"strum",
|
||||
|
|
@ -747,7 +749,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
|
|||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.14",
|
||||
"syn 2.0.74",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -820,7 +822,7 @@ dependencies = [
|
|||
"pest_meta",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.14",
|
||||
"syn 2.0.74",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -911,18 +913,18 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.56"
|
||||
version = "1.0.86"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435"
|
||||
checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77"
|
||||
dependencies = [
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "quote"
|
||||
version = "1.0.26"
|
||||
version = "1.0.36"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc"
|
||||
checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
]
|
||||
|
|
@ -1127,31 +1129,32 @@ checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed"
|
|||
|
||||
[[package]]
|
||||
name = "serde"
|
||||
version = "1.0.160"
|
||||
version = "1.0.207"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bb2f3770c8bce3bcda7e149193a069a0f4365bda1fa5cd88e03bca26afc1216c"
|
||||
checksum = "5665e14a49a4ea1b91029ba7d3bca9f299e1f7cfa194388ccc20f14743e784f2"
|
||||
dependencies = [
|
||||
"serde_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_derive"
|
||||
version = "1.0.160"
|
||||
version = "1.0.207"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "291a097c63d8497e00160b166a967a4a79c64f3facdd01cbd7502231688d77df"
|
||||
checksum = "6aea2634c86b0e8ef2cfdc0c340baede54ec27b1e46febd7f80dffb2aa44a00e"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.14",
|
||||
"syn 2.0.74",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_json"
|
||||
version = "1.0.95"
|
||||
version = "1.0.124"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d721eca97ac802aa7777b701877c8004d950fc142651367300d21c1cc0194744"
|
||||
checksum = "66ad62847a56b3dba58cc891acd13884b9c61138d330c0d7b6181713d4fce38d"
|
||||
dependencies = [
|
||||
"itoa",
|
||||
"memchr",
|
||||
"ryu",
|
||||
"serde",
|
||||
]
|
||||
|
|
@ -1289,9 +1292,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "2.0.14"
|
||||
version = "2.0.74"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fcf316d5356ed6847742d036f8a39c3b8435cac10bd528a4bd461928a6ab34d5"
|
||||
checksum = "1fceb41e3d546d0bd83421d3409b1460cc7444cd389341a4c880fe7a042cb3d7"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
|
|
@ -1343,7 +1346,7 @@ checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
|
|||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.14",
|
||||
"syn 2.0.74",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
|
|||
|
|
@ -10,4 +10,4 @@ members = [
|
|||
"ports",
|
||||
]
|
||||
|
||||
|
||||
resolver = "2"
|
||||
|
|
@ -26,3 +26,5 @@ sha3 = "0.9.1"
|
|||
pest = "2.1.3"
|
||||
pest_derive = "2.1.0"
|
||||
strum = { version = "0.24.1", features = ["derive"] }
|
||||
serde = { version = "1.0.207", features = ["derive"] }
|
||||
serde_json = "1.0.124"
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ use std::fs::read_to_string;
|
|||
use std::path::Path;
|
||||
use std::result::Result as StdResult;
|
||||
use std::str::FromStr;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use thiserror::Error;
|
||||
|
||||
type Result<T> = StdResult<T, ActionError>;
|
||||
|
|
@ -76,7 +77,7 @@ impl FacetedAction for Action {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Default, PartialEq, Clone)]
|
||||
#[derive(Debug, Default, PartialEq, Clone, Deserialize, Serialize)]
|
||||
pub struct Dir {
|
||||
pub path: String,
|
||||
pub group: String,
|
||||
|
|
@ -127,7 +128,7 @@ impl FacetedAction for Dir {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Default, PartialEq, Clone)]
|
||||
#[derive(Debug, Default, PartialEq, Clone, Deserialize, Serialize)]
|
||||
pub struct File {
|
||||
pub payload: Option<Payload>,
|
||||
pub path: String,
|
||||
|
|
@ -254,7 +255,7 @@ pub enum FileError {
|
|||
}
|
||||
|
||||
//TODO implement multiple FMRI for require-any
|
||||
#[derive(Debug, Default, PartialEq, Clone)]
|
||||
#[derive(Debug, Default, PartialEq, Clone, Deserialize, Serialize)]
|
||||
pub struct Dependency {
|
||||
pub fmri: String, //TODO make FMRI
|
||||
pub dependency_type: String, //TODO make enum
|
||||
|
|
@ -304,7 +305,7 @@ impl FacetedAction for Dependency {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Hash, Eq, PartialEq, Debug, Default, Clone)]
|
||||
#[derive(Hash, Eq, PartialEq, Debug, Default, Clone, Deserialize, Serialize)]
|
||||
pub struct Facet {
|
||||
pub name: String,
|
||||
pub value: String,
|
||||
|
|
@ -319,7 +320,7 @@ impl Facet {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Default, PartialEq, Clone)]
|
||||
#[derive(Debug, Default, PartialEq, Clone, Deserialize, Serialize)]
|
||||
pub struct Attr {
|
||||
pub key: String,
|
||||
pub values: Vec<String>,
|
||||
|
|
@ -356,7 +357,7 @@ impl From<Action> for Attr {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Eq, PartialEq, Debug, Default, Clone)]
|
||||
#[derive(Eq, PartialEq, Debug, Default, Clone, Deserialize, Serialize)]
|
||||
pub struct License {
|
||||
pub payload: String,
|
||||
pub properties: HashMap<String, Property>,
|
||||
|
|
@ -384,7 +385,7 @@ impl From<Action> for License {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Eq, PartialEq, Debug, Default, Clone)]
|
||||
#[derive(Eq, PartialEq, Debug, Default, Clone, Deserialize, Serialize)]
|
||||
pub struct Link {
|
||||
pub path: String,
|
||||
pub target: String,
|
||||
|
|
@ -421,13 +422,13 @@ impl From<Action> for Link {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Hash, Eq, PartialEq, Debug, Default, Clone)]
|
||||
#[derive(Hash, Eq, PartialEq, Debug, Default, Clone, Deserialize, Serialize)]
|
||||
pub struct Property {
|
||||
pub key: String,
|
||||
pub value: String,
|
||||
}
|
||||
|
||||
#[derive(Debug, Default, PartialEq, Clone)]
|
||||
#[derive(Debug, Default, PartialEq, Clone, Deserialize, Serialize)]
|
||||
pub struct Manifest {
|
||||
pub attributes: Vec<Attr>,
|
||||
pub directories: Vec<Dir>,
|
||||
|
|
|
|||
58
libips/src/image/mod.rs
Normal file
58
libips/src/image/mod.rs
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
mod properties;
|
||||
|
||||
use std::collections::HashMap;
|
||||
use std::fs::File;
|
||||
use properties::*;
|
||||
use std::path::{Path, PathBuf};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use thiserror::Error;
|
||||
|
||||
#[derive(Debug, Error)]
|
||||
pub enum ImageError {
|
||||
//Implement derives for IO error and serde_json error
|
||||
#[error(transparent)]
|
||||
IO(#[from] std::io::Error),
|
||||
#[error(transparent)]
|
||||
Json(#[from] serde_json::Error),
|
||||
}
|
||||
|
||||
pub type Result<T> = std::result::Result<T, ImageError>;
|
||||
|
||||
#[derive(Clone, Debug, Deserialize, Serialize)]
|
||||
pub struct Image {
|
||||
path: PathBuf,
|
||||
props: Vec<ImageProperty>,
|
||||
version: i32,
|
||||
variants: HashMap<String, String>,
|
||||
mediators: HashMap<String, String>,
|
||||
}
|
||||
|
||||
impl Image {
|
||||
pub fn new<P: Into<PathBuf>>(path: P) -> Image {
|
||||
Image{
|
||||
path: path.into(),
|
||||
version: 5,
|
||||
variants: HashMap::new(),
|
||||
mediators: HashMap::new(),
|
||||
props: vec![],
|
||||
}
|
||||
}
|
||||
|
||||
pub fn open<P: AsRef<Path>>(path: P) -> Result<Image> {
|
||||
let path = path.as_ref();
|
||||
|
||||
//TODO: Parse the old INI format of pkg5
|
||||
//TODO once root images are implemented, look for metadata under sub directory var/pkg
|
||||
let props_path = path.join("pkg6.image.json");
|
||||
let mut f = File::open(props_path)?;
|
||||
Ok(serde_json::from_reader(&mut f)?)
|
||||
}
|
||||
|
||||
pub fn open_default<P: AsRef<Path>>(path: P) -> Image {
|
||||
if let Ok(img) = Image::open(path.as_ref()) {
|
||||
img
|
||||
} else {
|
||||
Image::new(path.as_ref())
|
||||
}
|
||||
}
|
||||
}
|
||||
11
libips/src/image/properties.rs
Normal file
11
libips/src/image/properties.rs
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
use serde::{Deserialize, Serialize};
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Default, Deserialize, Serialize)]
|
||||
pub enum ImageProperty {
|
||||
String(String),
|
||||
Boolean(bool),
|
||||
#[default]
|
||||
None,
|
||||
Array(Vec<ImageProperty>),
|
||||
Integer(i32),
|
||||
}
|
||||
|
|
@ -7,6 +7,7 @@
|
|||
pub mod actions;
|
||||
pub mod digest;
|
||||
pub mod payload;
|
||||
pub mod image;
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue