diff --git a/Cargo.lock b/Cargo.lock index ae2c641..140df95 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -14,6 +14,8 @@ version = "1.1.0" dependencies = [ "bullet_stream", "cache_diff_derive", + "serde", + "trybuild", ] [[package]] @@ -271,17 +273,6 @@ version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" -[[package]] -name = "usage" -version = "0.1.0" -dependencies = [ - "cache_diff", - "indoc", - "pretty_assertions", - "serde", - "trybuild", -] - [[package]] name = "winapi-util" version = "0.1.9" diff --git a/Cargo.toml b/Cargo.toml index 0796f4a..4bb5f29 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,6 @@ [workspace] resolver = "2" members = [ - "usage", "cache_diff", "cache_diff_derive", ] @@ -15,6 +14,6 @@ repository = "https://github.com/heroku-buildpacks/cache_diff" documentation = "https://docs.rs/cache_diff" [workspace.dependencies] -pretty_assertions = "1.4.1" -indoc = "2" -serde = {version = "1.0", features = ["derive"] } +pretty_assertions = "1.4" +indoc = "2.0" +serde = { version = "1.0", features = ["derive"] } diff --git a/cache_diff/Cargo.toml b/cache_diff/Cargo.toml index 7692603..ec0432a 100644 --- a/cache_diff/Cargo.toml +++ b/cache_diff/Cargo.toml @@ -19,3 +19,7 @@ derive = ["dep:cache_diff_derive"] # Formats values with `bullet_stream::style::value` which includes ANSI colors bullet_stream = ["derive", "dep:bullet_stream"] + +[dev-dependencies] +trybuild = "1.0" +serde.workspace = true diff --git a/cache_diff/README.md b/cache_diff/README.md index 125b444..c7e845d 100644 --- a/cache_diff/README.md +++ b/cache_diff/README.md @@ -259,11 +259,11 @@ $ cargo install cargo-release Release readiness for all crates can be checked by running: ``` -$ cargo release --workspace --exclude usage --dry-run +$ cargo release --workspace --dry-run ``` When satisfied, contributors with permissions can release by running: ``` -$ cargo release --workspace --exclude usage --execute +$ cargo release --workspace --execute ``` diff --git a/usage/tests/compliation_tests.rs b/cache_diff/tests/compliation_tests.rs similarity index 100% rename from usage/tests/compliation_tests.rs rename to cache_diff/tests/compliation_tests.rs diff --git a/usage/tests/fails/accidental_custom_field.rs b/cache_diff/tests/fails/accidental_custom_field.rs similarity index 100% rename from usage/tests/fails/accidental_custom_field.rs rename to cache_diff/tests/fails/accidental_custom_field.rs diff --git a/usage/tests/fails/accidental_custom_field.stderr b/cache_diff/tests/fails/accidental_custom_field.stderr similarity index 100% rename from usage/tests/fails/accidental_custom_field.stderr rename to cache_diff/tests/fails/accidental_custom_field.stderr diff --git a/usage/tests/fails/generic_missing_bounds.rs b/cache_diff/tests/fails/generic_missing_bounds.rs similarity index 100% rename from usage/tests/fails/generic_missing_bounds.rs rename to cache_diff/tests/fails/generic_missing_bounds.rs diff --git a/usage/tests/fails/generic_missing_bounds.stderr b/cache_diff/tests/fails/generic_missing_bounds.stderr similarity index 97% rename from usage/tests/fails/generic_missing_bounds.stderr rename to cache_diff/tests/fails/generic_missing_bounds.stderr index 58e2136..8ca7b3c 100644 --- a/usage/tests/fails/generic_missing_bounds.stderr +++ b/cache_diff/tests/fails/generic_missing_bounds.stderr @@ -19,7 +19,7 @@ error[E0277]: `T` doesn't implement `std::fmt::Display` = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead = note: required for `&T` to implement `std::fmt::Display` note: required by a bound in `fmt_value` - --> $WORKSPACE/cache_diff/src/lib.rs + --> src/lib.rs | | fn fmt_value(&self, value: &T) -> String { | ^^^^^^^^^^^^^^^^^ required by this bound in `CacheDiff::fmt_value` diff --git a/usage/tests/fails/missing_custom.rs b/cache_diff/tests/fails/missing_custom.rs similarity index 100% rename from usage/tests/fails/missing_custom.rs rename to cache_diff/tests/fails/missing_custom.rs diff --git a/usage/tests/fails/missing_custom.stderr b/cache_diff/tests/fails/missing_custom.stderr similarity index 100% rename from usage/tests/fails/missing_custom.stderr rename to cache_diff/tests/fails/missing_custom.stderr diff --git a/usage/tests/fails/missing_display.rs b/cache_diff/tests/fails/missing_display.rs similarity index 100% rename from usage/tests/fails/missing_display.rs rename to cache_diff/tests/fails/missing_display.rs diff --git a/usage/tests/fails/missing_display.stderr b/cache_diff/tests/fails/missing_display.stderr similarity index 95% rename from usage/tests/fails/missing_display.stderr rename to cache_diff/tests/fails/missing_display.stderr index 11d79c2..7f2d6e6 100644 --- a/usage/tests/fails/missing_display.stderr +++ b/cache_diff/tests/fails/missing_display.stderr @@ -8,7 +8,7 @@ error[E0277]: `NotDisplay` doesn't implement `std::fmt::Display` = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead = note: required for `&NotDisplay` to implement `std::fmt::Display` note: required by a bound in `fmt_value` - --> $WORKSPACE/cache_diff/src/lib.rs + --> src/lib.rs | | fn fmt_value(&self, value: &T) -> String { | ^^^^^^^^^^^^^^^^^ required by this bound in `CacheDiff::fmt_value` diff --git a/usage/tests/pass/custom_with_serde_attribute.rs b/cache_diff/tests/pass/custom_with_serde_attribute.rs similarity index 100% rename from usage/tests/pass/custom_with_serde_attribute.rs rename to cache_diff/tests/pass/custom_with_serde_attribute.rs diff --git a/usage/tests/pass/struct_with_generics.rs b/cache_diff/tests/pass/struct_with_generics.rs similarity index 100% rename from usage/tests/pass/struct_with_generics.rs rename to cache_diff/tests/pass/struct_with_generics.rs diff --git a/usage/Cargo.toml b/usage/Cargo.toml deleted file mode 100644 index e8bf868..0000000 --- a/usage/Cargo.toml +++ /dev/null @@ -1,14 +0,0 @@ -[package] -name = "usage" -version = "0.1.0" -edition = "2021" -publish = false - -[dependencies] -cache_diff = { path = "../cache_diff" } - -[dev-dependencies] -trybuild = "1.0.101" -pretty_assertions.workspace = true -indoc.workspace = true -serde.workspace = true diff --git a/usage/src/main.rs b/usage/src/main.rs deleted file mode 100644 index 7604c49..0000000 --- a/usage/src/main.rs +++ /dev/null @@ -1,206 +0,0 @@ -use cache_diff::CacheDiff; - -#[derive(CacheDiff)] -struct Hello { - name: String, -} - -#[derive(CacheDiff)] -#[cache_diff(custom = diff_fn)] -struct CustomDiffFn { - name: String, -} - -fn diff_fn(old: &CustomDiffFn, now: &CustomDiffFn) -> Vec { - let mut diff = Vec::new(); - diff.push(format!( - "Totally custom old: {} now: {}", - old.name, now.name - )); - diff -} - -fn main() { - let _ = Hello { - name: "world".to_string(), - }; - println!("Hello, world!"); - let _ = CustomDiffFn { - name: "Hello".to_string(), - }; -} - -#[cfg(test)] -mod tests { - use super::*; - use pretty_assertions::assert_eq; - use std::path::PathBuf; - - fn is_diff(_in: &T) {} - - #[test] - fn custom_diff_function() { - let diff = CustomDiffFn { - name: "Richard".to_string(), - } - .diff(&CustomDiffFn { - name: "Schneems".to_string(), - }); - - assert_eq!( - [ - "Totally custom old: Schneems now: Richard".to_string(), - "name (`Schneems` to `Richard`)".to_string() - ], - diff[..] - ); - } - - #[test] - fn ignore_a_field() { - #[derive(CacheDiff)] - struct Metadata { - ruby_version: String, - #[cache_diff(ignore)] - #[allow(dead_code)] - _modified_by: String, - } - - let metadata = Metadata { - ruby_version: "3.4.0".to_string(), - _modified_by: "richard".to_string(), - }; - - let diff = metadata.diff(&Metadata { - ruby_version: "3.3.0".to_string(), - _modified_by: "not rich".to_string(), - }); - assert_eq!(diff.len(), 1); - let contents = diff.join(" "); - assert!( - !contents.contains("modified"), - "Unexpected contents {contents}" - ); - } - - #[test] - fn auto_display_path_buff() { - #[derive(CacheDiff)] - struct Metadata { - path: PathBuf, - } - let metadata = Metadata { - path: PathBuf::from("/tmp"), - }; - let diff = metadata.diff(&Metadata { - path: PathBuf::from("/tmp2"), - }); - - assert_eq!(diff.len(), 1); - let contents = diff.join(" "); - assert!( - contents.contains("/tmp"), - "Unexpected contents '{contents}'" - ); - } - - #[test] - fn ignore_rename_display_field() { - fn my_display(value: &String) -> String { - format!("custom {value}") - } - #[derive(CacheDiff)] - struct Metadata { - #[cache_diff(rename="Ruby version", display=my_display)] - version: String, - } - let metadata = Metadata { - version: "3.4.0".to_string(), - }; - let diff = metadata.diff(&Metadata { - version: "3.3.0".to_string(), - }); - - assert_eq!(diff.len(), 1); - let contents = diff.join(" "); - assert!( - contents.contains("custom 3.4.0"), - "Expected `{contents}` to contain 'custom 3.4.0'" - ); - } - - #[test] - fn ignore_rename_field() { - #[derive(CacheDiff)] - struct Metadata { - #[cache_diff(rename = "Ruby version")] - version: String, - } - let metadata = Metadata { - version: "3.4.0".to_string(), - }; - let diff = metadata.diff(&Metadata { - version: "3.3.0".to_string(), - }); - - assert_eq!(diff.len(), 1); - let contents = diff.join(" "); - assert!( - contents.contains("Ruby version"), - "Expected `{contents}` to contain Ruby version" - ); - } - - // #[test] - // fn ignore_field() { - // #[derive(CacheDiff)] - // struct Metadata { - // ruby_version: String, - // #[cache_diff(ignore)] - // modified_by: String, - // } - // let metadata = Metadata { - // ruby_version: "3.4.0".to_string(), - // modified_by: "richard".to_string(), - // }; - // let diff = metadata.diff(&Metadata { - // ruby_version: "3.3.0".to_string(), - // modified_by: "not rich".to_string(), - // }); - - // assert_eq!(diff.len(), 1); - // } - - #[test] - fn test_replace_space() { - #[derive(CacheDiff)] - struct Metadata { - ruby_version: String, - } - let metadata = Metadata { - ruby_version: "3.4.0".to_string(), - }; - let diff = metadata.diff(&Metadata { - ruby_version: "3.3.0".to_string(), - }); - assert_eq!(diff.len(), 1); - assert!(diff.join(" ").contains("ruby version")); - } - - #[test] - fn test_cache_diff() { - #[derive(CacheDiff)] - struct Person { - _name: String, - } - let richard = Person { - _name: "richard".to_string(), - }; - is_diff(&richard); - let diff = richard.diff(&Person { - _name: "rich".to_string(), - }); - - assert_eq!(diff.len(), 1); - } -} diff --git a/usage/src/multiple_structs.rs b/usage/src/multiple_structs.rs deleted file mode 100644 index 7089bcf..0000000 --- a/usage/src/multiple_structs.rs +++ /dev/null @@ -1,34 +0,0 @@ -// Ensure multiple derives can be in the same file -#[derive(CacheDiff)] -struct Dog { - woof: String, -} -#[allow(dead_code)] -#[derive(CacheDiff)] -struct Cat { - meow: String, -} -#[cfg(test)] -mod test { - use super::*; - #[test] - fn test_cat() { - let diff = Cat { - meow: "Meow".to_string(), - } - .diff(&Cat { - meow: "Woem".to_string(), - }); - assert!(diff.len() == 1); - } - #[test] - fn test_dog() { - let diff = Dog { - woof: "Woof".to_string(), - } - .diff(&Dog { - woof: "Foow".to_string(), - }); - assert!(diff.len() == 1); - } -}