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", "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]] [[package]]
name = "digest" name = "digest"
version = "0.9.0" version = "0.9.0"
@ -603,6 +625,7 @@ name = "libips"
version = "0.1.2" version = "0.1.2"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"diff-struct",
"maplit 0.1.6", "maplit 0.1.6",
"object", "object",
"pest", "pest",
@ -694,6 +717,79 @@ dependencies = [
"tempfile", "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]] [[package]]
name = "num_cpus" name = "num_cpus"
version = "1.15.0" version = "1.15.0"
@ -854,6 +950,14 @@ version = "0.3.26"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160"
[[package]]
name = "pkg6"
version = "0.1.0"
dependencies = [
"diff-struct",
"libips",
]
[[package]] [[package]]
name = "pkg6depotd" name = "pkg6depotd"
version = "0.0.1-placeholder" version = "0.0.1-placeholder"

View file

@ -8,6 +8,7 @@ members = [
"userland", "userland",
"specfile", "specfile",
"ports", "ports",
"crates/*",
] ]
resolver = "2" 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"] } strum = { version = "0.24.1", features = ["derive"] }
serde = { version = "1.0.207", features = ["derive"] } serde = { version = "1.0.207", features = ["derive"] }
serde_json = "1.0.124" 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::path::Path;
use std::result::Result as StdResult; use std::result::Result as StdResult;
use std::str::FromStr; use std::str::FromStr;
use diff::Diff;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use thiserror::Error; 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 struct Dir {
pub path: String, pub path: String,
pub group: 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 struct File {
pub payload: Option<Payload>, pub payload: Option<Payload>,
pub path: String, pub path: String,
@ -255,7 +262,10 @@ pub enum FileError {
} }
//TODO implement multiple FMRI for require-any //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 struct Dependency {
pub fmri: String, //TODO make FMRI pub fmri: String, //TODO make FMRI
pub dependency_type: String, //TODO make enum 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 struct Facet {
pub name: String, pub name: String,
pub value: 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 struct Attr {
pub key: String, pub key: String,
pub values: Vec<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 struct License {
pub payload: String, pub payload: String,
pub properties: HashMap<String, Property>, 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 struct Link {
pub path: String, pub path: String,
pub target: 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 struct Property {
pub key: String, pub key: String,
pub value: 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 struct Manifest {
pub attributes: Vec<Attr>, pub attributes: Vec<Attr>,
pub directories: Vec<Dir>, pub directories: Vec<Dir>,

View file

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

View file

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