Adding diff-struct

Signed-off-by: Till Wegmueller <toasterson@gmail.com>
This commit is contained in:
Till Wegmueller 2024-08-15 21:27:00 +02:00
parent 5cea5186d7
commit bef5442afd
No known key found for this signature in database
8 changed files with 186 additions and 16 deletions

104
Cargo.lock generated
View file

@ -184,6 +184,28 @@ dependencies = [
"typenum",
]
[[package]]
name = "diff-struct"
version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "79aac083112b31f7cb768b24b893dc0c34c296a4b06b250c407bfd495e42075c"
dependencies = [
"diff_derive",
"num",
"serde",
]
[[package]]
name = "diff_derive"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fe165e7ead196bbbf44c7ce11a7a21157b5c002ce46d7098ff9c556784a4912d"
dependencies = [
"proc-macro2",
"quote",
"syn 1.0.109",
]
[[package]]
name = "digest"
version = "0.9.0"
@ -603,6 +625,7 @@ name = "libips"
version = "0.1.2"
dependencies = [
"anyhow",
"diff-struct",
"maplit 0.1.6",
"object",
"pest",
@ -694,6 +717,79 @@ dependencies = [
"tempfile",
]
[[package]]
name = "num"
version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23"
dependencies = [
"num-bigint",
"num-complex",
"num-integer",
"num-iter",
"num-rational",
"num-traits",
]
[[package]]
name = "num-bigint"
version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9"
dependencies = [
"num-integer",
"num-traits",
]
[[package]]
name = "num-complex"
version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495"
dependencies = [
"num-traits",
]
[[package]]
name = "num-integer"
version = "0.1.46"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"
dependencies = [
"num-traits",
]
[[package]]
name = "num-iter"
version = "0.1.45"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf"
dependencies = [
"autocfg",
"num-integer",
"num-traits",
]
[[package]]
name = "num-rational"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824"
dependencies = [
"num-bigint",
"num-integer",
"num-traits",
]
[[package]]
name = "num-traits"
version = "0.2.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
dependencies = [
"autocfg",
]
[[package]]
name = "num_cpus"
version = "1.15.0"
@ -854,6 +950,14 @@ version = "0.3.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160"
[[package]]
name = "pkg6"
version = "0.1.0"
dependencies = [
"diff-struct",
"libips",
]
[[package]]
name = "pkg6depotd"
version = "0.0.1-placeholder"

View file

@ -8,6 +8,7 @@ members = [
"userland",
"specfile",
"ports",
"crates/*",
]
resolver = "2"

8
crates/pkg6/Cargo.toml Normal file
View file

@ -0,0 +1,8 @@
[package]
name = "pkg6"
version = "0.1.0"
edition = "2021"
[dependencies]
libips = { version = "0.1.2", path = "../../libips" }
diff-struct = "0.5.3"

3
crates/pkg6/src/main.rs Normal file
View file

@ -0,0 +1,3 @@
fn main() {
}

View file

@ -28,3 +28,4 @@ pest_derive = "2.1.0"
strum = { version = "0.24.1", features = ["derive"] }
serde = { version = "1.0.207", features = ["derive"] }
serde_json = "1.0.124"
diff-struct = "0.5.3"

View file

@ -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 diff::Diff;
use serde::{Deserialize, Serialize};
use thiserror::Error;
@ -77,7 +78,10 @@ impl FacetedAction for Action {
}
}
#[derive(Debug, Default, PartialEq, Clone, Deserialize, Serialize)]
#[derive(Debug, Default, PartialEq, Clone, Deserialize, Serialize, Diff)]
#[diff(attr(
#[derive(Debug, PartialEq)]
))]
pub struct Dir {
pub path: String,
pub group: String,
@ -128,7 +132,10 @@ impl FacetedAction for Dir {
}
}
#[derive(Debug, Default, PartialEq, Clone, Deserialize, Serialize)]
#[derive(Debug, Default, PartialEq, Clone, Deserialize, Serialize, Diff)]
#[diff(attr(
#[derive(Debug, PartialEq)]
))]
pub struct File {
pub payload: Option<Payload>,
pub path: String,
@ -255,7 +262,10 @@ pub enum FileError {
}
//TODO implement multiple FMRI for require-any
#[derive(Debug, Default, PartialEq, Clone, Deserialize, Serialize)]
#[derive(Debug, Default, PartialEq, Clone, Deserialize, Serialize, Diff)]
#[diff(attr(
#[derive(Debug, PartialEq)]
))]
pub struct Dependency {
pub fmri: String, //TODO make FMRI
pub dependency_type: String, //TODO make enum
@ -305,7 +315,10 @@ impl FacetedAction for Dependency {
}
}
#[derive(Hash, Eq, PartialEq, Debug, Default, Clone, Deserialize, Serialize)]
#[derive(Debug, Default, PartialEq, Clone, Deserialize, Serialize, Diff)]
#[diff(attr(
#[derive(Debug, PartialEq)]
))]
pub struct Facet {
pub name: String,
pub value: String,
@ -320,7 +333,10 @@ impl Facet {
}
}
#[derive(Debug, Default, PartialEq, Clone, Deserialize, Serialize)]
#[derive(Debug, Default, PartialEq, Clone, Deserialize, Serialize, Diff)]
#[diff(attr(
#[derive(Debug, PartialEq)]
))]
pub struct Attr {
pub key: String,
pub values: Vec<String>,
@ -357,7 +373,10 @@ impl From<Action> for Attr {
}
}
#[derive(Eq, PartialEq, Debug, Default, Clone, Deserialize, Serialize)]
#[derive(Debug, Default, PartialEq, Clone, Deserialize, Serialize, Diff)]
#[diff(attr(
#[derive(Debug, PartialEq)]
))]
pub struct License {
pub payload: String,
pub properties: HashMap<String, Property>,
@ -385,7 +404,10 @@ impl From<Action> for License {
}
}
#[derive(Eq, PartialEq, Debug, Default, Clone, Deserialize, Serialize)]
#[derive(Debug, Default, PartialEq, Clone, Deserialize, Serialize, Diff)]
#[diff(attr(
#[derive(Debug, PartialEq)]
))]
pub struct Link {
pub path: String,
pub target: String,
@ -422,13 +444,19 @@ impl From<Action> for Link {
}
}
#[derive(Hash, Eq, PartialEq, Debug, Default, Clone, Deserialize, Serialize)]
#[derive(Hash, Eq, PartialEq, Debug, Default, Clone, Deserialize, Serialize, Diff)]
#[diff(attr(
#[derive(Debug, PartialEq)]
))]
pub struct Property {
pub key: String,
pub value: String,
}
#[derive(Debug, Default, PartialEq, Clone, Deserialize, Serialize)]
#[derive(Debug, Default, PartialEq, Clone, Deserialize, Serialize, Diff)]
#[diff(attr(
#[derive(Debug, PartialEq)]
))]
pub struct Manifest {
pub attributes: Vec<Attr>,
pub directories: Vec<Dir>,

View file

@ -9,6 +9,8 @@ use sha3::Digest as Sha3Digest;
use std::fmt::Display;
use std::str::FromStr;
use std::{convert::TryInto, result::Result as StdResult};
use diff::Diff;
use serde::{Deserialize, Serialize};
use strum::{Display as StrumDisplay, EnumString};
use thiserror::Error;
@ -17,7 +19,10 @@ type Result<T> = StdResult<T, DigestError>;
#[allow(dead_code)]
static DEFAULT_ALGORITHM: DigestAlgorithm = DigestAlgorithm::SHA512;
#[derive(Debug, PartialEq, Clone, StrumDisplay, EnumString, Default)]
#[derive(Debug, PartialEq, Clone, StrumDisplay, EnumString, Default, Deserialize, Serialize, Diff)]
#[diff(attr(
#[derive(Debug, PartialEq)]
))]
pub enum DigestAlgorithm {
#[default]
#[strum(serialize = "sha1")]
@ -36,7 +41,10 @@ pub enum DigestAlgorithm {
SHA3512, // Sha3 version of sha512t
}
#[derive(Debug, PartialEq, Clone, StrumDisplay, EnumString, Default)]
#[derive(Debug, PartialEq, Clone, StrumDisplay, EnumString, Default, Deserialize, Serialize, Diff)]
#[diff(attr(
#[derive(Debug, PartialEq)]
))]
pub enum DigestSource {
#[strum(serialize = "gzip")]
GzipCompressed,
@ -52,7 +60,10 @@ pub enum DigestSource {
PrimaryPayloadHash,
}
#[derive(Debug, Default, PartialEq, Clone)]
#[derive(Debug, Default, PartialEq, Clone, Deserialize, Serialize, Diff)]
#[diff(attr(
#[derive(Debug, PartialEq)]
))]
pub struct Digest {
pub hash: String,
pub algorithm: DigestAlgorithm,

View file

@ -8,6 +8,8 @@ use object::Object;
use std::io::Error as IOError;
use std::path::Path;
use std::result::Result as StdResult;
use diff::Diff;
use serde::{Deserialize, Serialize};
use thiserror::Error;
type Result<T> = StdResult<T, PayloadError>;
@ -20,14 +22,20 @@ pub enum PayloadError {
DigestError(#[from] DigestError),
}
#[derive(Debug, PartialEq, Clone, Default)]
#[derive(Debug, PartialEq, Clone, Default, Deserialize, Serialize, Diff)]
#[diff(attr(
#[derive(Debug, PartialEq)]
))]
pub enum PayloadCompressionAlgorithm {
Gzip,
#[default]
LZ4,
}
#[derive(Debug, PartialEq, Clone, Default)]
#[derive(Debug, PartialEq, Clone, Default, Deserialize, Serialize, Diff)]
#[diff(attr(
#[derive(Debug, PartialEq)]
))]
pub enum PayloadBits {
#[default]
Independent,
@ -35,7 +43,10 @@ pub enum PayloadBits {
Bits64,
}
#[derive(Debug, PartialEq, Clone, Default)]
#[derive(Debug, PartialEq, Clone, Default, Deserialize, Serialize, Diff)]
#[diff(attr(
#[derive(Debug, PartialEq)]
))]
pub enum PayloadArchitecture {
#[default]
NOARCH,
@ -45,7 +56,10 @@ pub enum PayloadArchitecture {
RISCV,
}
#[derive(Debug, Default, PartialEq, Clone)]
#[derive(Debug, Default, PartialEq, Clone, Deserialize, Serialize, Diff)]
#[diff(attr(
#[derive(Debug, PartialEq)]
))]
pub struct Payload {
pub primary_identifier: Digest,
pub additional_identifiers: Vec<Digest>,