diff --git a/CHANGELOG.md b/CHANGELOG.md index 340aeb6d..39390686 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ - Update tokio to latest version ([#833](https://github.com/getsentry/symbolic/pull/833)) - Fix infinite recursion caused by indirect self-references when resolving function names ([#836](https://github.com/getsentry/symbolic/pull/836)) +- Switch to workspace dependencies ([#841](https://github.com/getsentry/symbolic/pull/841)) **Fixes** diff --git a/Cargo.toml b/Cargo.toml index 1a743671..bc83a82f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,9 +5,79 @@ members = [ "examples/*", ] +[workspace.dependencies] +anyhow = "1.0.32" +anylog = "0.6.4" +async-trait = "0.1.53" +bytes = "1.4.0" +cc = "1.0.79" +chrono = { version = "0.4.23", default-features = false, features = ["std"] } +clap = "4.4.5" +cpp_demangle = "0.4.1" +criterion = { version = "0.5.1", features = ["html_reports"] } +debugid = "0.8.0" +dmsort = "1.0.2" +elementtree = "1.2.3" +elsa = "1.8.0" +fallible-iterator = "0.3.0" +flate2 = { version = "1.0.25" , default-features = false, features = ["rust_backend"] } +gimli = { version = "0.28.1" , default-features = false, features = ["read", "std", "fallible-iterator"] } +goblin = { version = "0.8.0" , default-features = false } +indexmap = "2.0.0" +insta = { version = "1.28.0", features = ["yaml"] } +itertools = "0.12.0" +js-source-scopes = "0.4.0" +lazy_static = "1.4.0" +libfuzzer-sys = "0.4" +memmap2 = "0.9.0" +minidump = "0.21.0" +minidump-processor = "0.21.0" +minidump-unwind = "0.21.0" +msvc-demangler = "0.10.0" +nom = "7.1.3" +nom-supreme = "0.8.0" +once_cell = "1.17.1" +parking_lot = "0.12.1" +pdb-addr2line = "0.10.4" +proguard = { version = "5.4.0", features = ["uuid"] } +regex = "1.7.1" +rustc-demangle = "0.1.21" +# keep this in sync with whatever version `goblin` uses +scroll = "0.12.0" +serde = { version = "1.0.171", features = ["derive"] } +serde_json = "1.0.102" +similar-asserts = "1.4.2" +smallvec = "1.10.0" +sourcemap = "7.0.0" +stable_deref_trait = "1.2.0" +symbolic = { version = "12.8.0", path = "symbolic" } +symbolic-cfi = { version = "12.8.0", path = "symbolic-cfi" } +symbolic-common = { version = "12.8.0", path = "symbolic-common" } +symbolic-demangle = { version = "12.8.0", path = "symbolic-demangle" } +symbolic-debuginfo = { version = "12.8.0", path = "symbolic-debuginfo" } +symbolic-il2cpp = { version = "12.8.0", path = "symbolic-il2cpp" } +symbolic-ppdb = { version = "12.8.0", path = "symbolic-ppdb" } +symbolic-sourcemapcache = { version = "12.8.0", path = "symbolic-sourcemapcache" } +symbolic-symcache = { version = "12.8.0", path = "symbolic-symcache" } +symbolic-testutils = { path = "symbolic-testutils" } +symbolic-unreal = { version = "12.8.0", path = "symbolic-unreal" } +tempfile = "3.4.0" +thiserror = "1.0.39" +time = { version = "0.3.20", features = ["formatting"] } +tokio = "1.36.0" +tracing = "0.1.34" +tracing-subscriber = "0.3.11" +uuid = "1.3.0" +walkdir = "2.3.1" +wasmparser = "0.202.0" +watto = { version = "0.1.0", features = ["writer", "strings"] } +zip = { version = "1.3.1" , default-features = false, features = ["deflate"] } + + [profile.release] debug = true lto = true [profile.bench] debug = true + diff --git a/examples/addr2line/Cargo.toml b/examples/addr2line/Cargo.toml index ea2948f5..d56d4c5b 100644 --- a/examples/addr2line/Cargo.toml +++ b/examples/addr2line/Cargo.toml @@ -8,6 +8,6 @@ publish = false # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -anyhow = "1.0.32" -clap = "4.4.5" -symbolic = { path = "../../symbolic", features = ["demangle"] } +anyhow = { workspace = true } +clap = { workspace = true } +symbolic = { workspace = true, features = ["demangle"] } diff --git a/examples/debuginfo_debug/Cargo.toml b/examples/debuginfo_debug/Cargo.toml index 82d135c4..99308d33 100644 --- a/examples/debuginfo_debug/Cargo.toml +++ b/examples/debuginfo_debug/Cargo.toml @@ -8,6 +8,6 @@ publish = false # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -anyhow = "1.0.32" -clap = "4.4.5" -symbolic = { path = "../../symbolic", features = ["demangle"] } +anyhow = { workspace = true } +clap = { workspace = true } +symbolic = { workspace = true, features = ["demangle"] } diff --git a/examples/dump_cfi/Cargo.toml b/examples/dump_cfi/Cargo.toml index 5a156ca9..4acfb7b1 100644 --- a/examples/dump_cfi/Cargo.toml +++ b/examples/dump_cfi/Cargo.toml @@ -8,6 +8,6 @@ publish = false # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -anyhow = "1.0.32" -clap = "4.4.5" -symbolic = { path = "../../symbolic", features = ["cfi"] } +anyhow = { workspace = true } +clap = { workspace = true } +symbolic = { workspace = true, features = ["cfi"] } diff --git a/examples/dump_sources/Cargo.toml b/examples/dump_sources/Cargo.toml index ca450032..5d1bfaea 100644 --- a/examples/dump_sources/Cargo.toml +++ b/examples/dump_sources/Cargo.toml @@ -8,5 +8,5 @@ publish = false # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -clap = "4.4.5" -symbolic = { path = "../../symbolic" } +clap = { workspace = true } +symbolic = { workspace = true } diff --git a/examples/minidump_stackwalk/Cargo.toml b/examples/minidump_stackwalk/Cargo.toml index e1e9d1b0..11ff39c3 100644 --- a/examples/minidump_stackwalk/Cargo.toml +++ b/examples/minidump_stackwalk/Cargo.toml @@ -8,14 +8,14 @@ publish = false # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -async-trait = "0.1.53" -clap = "4.4.5" -minidump = "0.21.0" -minidump-processor = "0.21.0" -minidump-unwind = "0.21.0" -symbolic = { path = "../../symbolic", features = ["symcache", "demangle", "cfi"] } -thiserror = "1.0.31" -tokio = { version = "1.36.0", features = ["macros", "rt"] } -tracing = "0.1.34" -tracing-subscriber = "0.3.11" -walkdir = "2.3.1" +async-trait = { workspace = true } +clap = { workspace = true } +minidump = { workspace = true } +minidump-processor = { workspace = true } +minidump-unwind = { workspace = true } +symbolic = { workspace = true, features = ["symcache", "demangle", "cfi"] } +thiserror = { workspace = true } +tokio = { workspace = true, features = ["macros", "rt"] } +tracing = { workspace = true } +tracing-subscriber = { workspace = true } +walkdir = { workspace = true } diff --git a/examples/object_debug/Cargo.toml b/examples/object_debug/Cargo.toml index 7aceef75..6ca4f548 100644 --- a/examples/object_debug/Cargo.toml +++ b/examples/object_debug/Cargo.toml @@ -8,5 +8,5 @@ publish = false # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -clap = "4.4.5" -symbolic = { path = "../../symbolic" } +clap = { workspace = true } +symbolic = { workspace = true } diff --git a/examples/sourcemapcache_debug/Cargo.toml b/examples/sourcemapcache_debug/Cargo.toml index 8b2b1fd5..799ab4c3 100644 --- a/examples/sourcemapcache_debug/Cargo.toml +++ b/examples/sourcemapcache_debug/Cargo.toml @@ -6,8 +6,8 @@ edition = "2021" publish = false [dependencies] -anyhow = "1.0.32" -clap = "4.4.5" -symbolic = { path = "../../symbolic", features = ["sourcemapcache"] } -tracing = "0.1.36" -tracing-subscriber = { version = "0.3.15", features = ["env-filter"] } +anyhow = { workspace = true } +clap = { workspace = true } +symbolic = { workspace = true, features = ["sourcemapcache"] } +tracing = { workspace = true } +tracing-subscriber = { workspace = true, features = ["env-filter"] } diff --git a/examples/symcache_debug/Cargo.toml b/examples/symcache_debug/Cargo.toml index de1cf533..71be273f 100644 --- a/examples/symcache_debug/Cargo.toml +++ b/examples/symcache_debug/Cargo.toml @@ -8,6 +8,6 @@ publish = false # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -anyhow = "1.0.32" -clap = "4.4.5" -symbolic = { path = "../../symbolic", features = ["symcache", "demangle", "il2cpp"] } +anyhow = { workspace = true } +clap = { workspace = true } +symbolic = { workspace = true, features = ["symcache", "demangle", "il2cpp"] } diff --git a/examples/unreal_engine_crash/Cargo.toml b/examples/unreal_engine_crash/Cargo.toml index 5eed9919..c420f50d 100644 --- a/examples/unreal_engine_crash/Cargo.toml +++ b/examples/unreal_engine_crash/Cargo.toml @@ -8,5 +8,5 @@ publish = false # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -clap = "4.4.5" -symbolic = { path = "../../symbolic", features = ["unreal"] } +clap = { workspace = true } +symbolic = { workspace = true, features = ["unreal"] } diff --git a/symbolic-cabi/Cargo.toml b/symbolic-cabi/Cargo.toml index 018ae82f..ea8bc6f3 100644 --- a/symbolic-cabi/Cargo.toml +++ b/symbolic-cabi/Cargo.toml @@ -20,7 +20,7 @@ publish = false crate-type = ["cdylib"] [dependencies] -proguard = { version = "5.4.0", features = ["uuid"] } -sourcemap = "7.0.0" -symbolic = { version = "12.8.0", path = "../symbolic", features = ["cfi", "debuginfo", "sourcemapcache", "symcache"] } -tempfile = "3.4.0" +proguard = { workspace = true, features = ["uuid"] } +sourcemap = { workspace = true } +symbolic = { workspace = true, features = ["cfi", "debuginfo", "sourcemapcache", "symcache"] } +tempfile = { workspace = true } diff --git a/symbolic-cfi/Cargo.toml b/symbolic-cfi/Cargo.toml index 355b3e7e..2b4302c8 100644 --- a/symbolic-cfi/Cargo.toml +++ b/symbolic-cfi/Cargo.toml @@ -15,11 +15,11 @@ A library to process call frame information edition = "2021" [dependencies] -symbolic-common = { version = "12.8.0", path = "../symbolic-common" } -symbolic-debuginfo = { version = "12.8.0", path = "../symbolic-debuginfo" } -thiserror = "1.0.39" +symbolic-common = { workspace = true } +symbolic-debuginfo = { workspace = true } +thiserror = { workspace = true } [dev-dependencies] -insta = { version = "1.28.0", features = ["yaml"] } -symbolic-testutils = { path = "../symbolic-testutils" } -similar-asserts = "1.4.2" +insta = { workspace = true } +symbolic-testutils = { workspace = true } +similar-asserts = { workspace = true } diff --git a/symbolic-common/Cargo.toml b/symbolic-common/Cargo.toml index 3d92c154..924bc061 100644 --- a/symbolic-common/Cargo.toml +++ b/symbolic-common/Cargo.toml @@ -23,13 +23,13 @@ all-features = true serde = ["dep:serde", "debugid/serde"] [dependencies] -debugid = "0.8.0" -memmap2 = "0.9.0" -stable_deref_trait = "1.2.0" -serde = { version = "1.0.154", optional = true, features = ["derive"] } -uuid = "1.3.0" +debugid = { workspace = true } +memmap2 = { workspace = true } +stable_deref_trait = { workspace = true } +serde = { workspace = true, optional = true } +uuid = { workspace = true } [dev-dependencies] -symbolic-testutils = { path = "../symbolic-testutils" } -tempfile = "3.4.0" -similar-asserts = "1.4.2" +symbolic-testutils = { workspace = true } +tempfile = { workspace = true } +similar-asserts = { workspace = true } diff --git a/symbolic-debuginfo/Cargo.toml b/symbolic-debuginfo/Cargo.toml index a9f4d17b..9efb125f 100644 --- a/symbolic-debuginfo/Cargo.toml +++ b/symbolic-debuginfo/Cargo.toml @@ -79,38 +79,37 @@ js = [] wasm = ["dwarf", "wasmparser"] [dependencies] -dmsort = "1.0.2" -debugid = { version = "0.8.0" } -elementtree = { version = "1.2.3", optional = true } -elsa = { version = "1.8.0", optional = true } -fallible-iterator = "0.3.0" -flate2 = { version = "1.0.25", optional = true, default-features = false, features = ["rust_backend"] } -gimli = { version = "0.28.1", optional = true, default-features = false, features = ["read", "std", "fallible-iterator"] } -goblin = { version = "0.8.0", optional = true, default-features = false } -lazy_static = { version = "1.4.0", optional = true } -once_cell = { version = "1.17.1", optional = true } -nom = { version = "7.1.3", optional = true } -nom-supreme = { version = "0.8.0", optional = true } -parking_lot = { version = "0.12.1", optional = true } -pdb-addr2line = { version = "0.10.4", optional = true } -regex = { version = "1.7.1", optional = true } -# keep this in sync with whatever version `goblin` uses -scroll = { version = "0.12.0", optional = true } -serde = { version = "1.0.154", features = ["derive"] } -serde_json = { version = "1.0.94", optional = true } -smallvec = { version = "1.10.0", optional = true } -symbolic-common = { version = "12.8.0", path = "../symbolic-common" } -symbolic-ppdb = { version = "12.8.0", path = "../symbolic-ppdb", optional = true } -thiserror = "1.0.39" -wasmparser = { version = "0.202.0", optional = true } -zip = { version = "1.3.1", optional = true, default-features = false, features = ["deflate"] } +dmsort = { workspace = true } +debugid = { workspace = true } +elementtree = { workspace = true, optional = true } +elsa = { workspace = true, optional = true } +fallible-iterator = { workspace = true } +flate2 = { workspace = true, optional = true } +gimli = { workspace = true, optional = true } +goblin = { workspace = true, optional = true } +lazy_static = { workspace = true, optional = true } +once_cell = { workspace = true, optional = true } +nom = { workspace = true, optional = true } +nom-supreme = { workspace = true, optional = true } +parking_lot = { workspace = true, optional = true } +pdb-addr2line = { workspace = true, optional = true } +regex = { workspace = true, optional = true } +scroll = { workspace = true, optional = true } +serde = { workspace = true } +serde_json = { workspace = true, optional = true } +smallvec = { workspace = true, optional = true } +symbolic-common = { workspace = true } +symbolic-ppdb = { workspace = true, optional = true } +thiserror = { workspace = true } +wasmparser = { workspace = true, optional = true } +zip = { workspace = true, optional = true } [dev-dependencies] -criterion = { version = "0.5.1", features = ["html_reports"] } -insta = { version = "1.28.0", features = ["yaml"] } -tempfile = "3.4.0" -similar-asserts = "1.4.2" -symbolic-testutils = { path = "../symbolic-testutils" } +criterion = { workspace = true } +insta = { workspace = true } +tempfile = { workspace = true } +similar-asserts = { workspace = true } +symbolic-testutils = { workspace = true } [[bench]] name = "breakpad_parser" diff --git a/symbolic-demangle/Cargo.toml b/symbolic-demangle/Cargo.toml index e4ecff0c..05d90343 100644 --- a/symbolic-demangle/Cargo.toml +++ b/symbolic-demangle/Cargo.toml @@ -31,13 +31,13 @@ rust = ["rustc-demangle"] swift = ["cc"] [dependencies] -cpp_demangle = { version = "0.4.1", optional = true } -msvc-demangler = { version = "0.10.0", optional = true } -rustc-demangle = { version = "0.1.21", optional = true } -symbolic-common = { version = "12.8.0", path = "../symbolic-common" } +cpp_demangle = { workspace = true, optional = true } +msvc-demangler = { workspace = true, optional = true } +rustc-demangle = { workspace = true, optional = true } +symbolic-common = { workspace = true } [build-dependencies] -cc = { version = "1.0.79", optional = true } +cc = { workspace = true, optional = true } [dev-dependencies] -similar-asserts = "1.4.2" +similar-asserts = { workspace = true } diff --git a/symbolic-il2cpp/Cargo.toml b/symbolic-il2cpp/Cargo.toml index 56d7a8a7..545f5faf 100644 --- a/symbolic-il2cpp/Cargo.toml +++ b/symbolic-il2cpp/Cargo.toml @@ -12,7 +12,7 @@ A library for parsing il2cpp line mappings. edition = "2021" [dependencies] -indexmap = "2.0.0" -serde_json = "1.0.94" -symbolic-common = { version = "12.8.0", path = "../symbolic-common" } -symbolic-debuginfo = { version = "12.8.0", path = "../symbolic-debuginfo" } +indexmap = { workspace = true } +serde_json = { workspace = true } +symbolic-common = { workspace = true } +symbolic-debuginfo = { workspace = true } diff --git a/symbolic-ppdb/Cargo.toml b/symbolic-ppdb/Cargo.toml index 954f5cfb..d389bbee 100644 --- a/symbolic-ppdb/Cargo.toml +++ b/symbolic-ppdb/Cargo.toml @@ -20,15 +20,15 @@ exclude = ["tests/**/*"] all-features = true [dependencies] -indexmap = "2.0.0" -symbolic-common = { version = "12.8.0", path = "../symbolic-common" } -watto = { version = "0.1.0", features = ["writer", "strings"] } -thiserror = "1.0.39" -uuid = "1.3.0" -flate2 = { version = "1.0.25", default-features = false, features = ["rust_backend"] } -serde_json = "1.0.102" -serde = "1.0.171" +indexmap = { workspace = true } +symbolic-common = { workspace = true } +watto = { workspace = true } +thiserror = { workspace = true } +uuid = { workspace = true } +flate2 = { workspace = true } +serde_json = { workspace = true } +serde = { workspace = true } [dev-dependencies] -symbolic-debuginfo = { path = "../symbolic-debuginfo" } -symbolic-testutils = { path = "../symbolic-testutils" } +symbolic-debuginfo = { workspace = true } +symbolic-testutils = { workspace = true } diff --git a/symbolic-sourcemapcache/Cargo.toml b/symbolic-sourcemapcache/Cargo.toml index ad009018..767b0554 100644 --- a/symbolic-sourcemapcache/Cargo.toml +++ b/symbolic-sourcemapcache/Cargo.toml @@ -12,13 +12,13 @@ A fast lookup cache for JavaScript Source Maps. edition = "2021" [dependencies] -itertools = "0.12.0" -js-source-scopes = "0.4.0" -sourcemap = "7.0.0" -symbolic-common = { version = "12.8.0", path = "../symbolic-common" } -thiserror = "1.0.39" -tracing = "0.1.37" -watto = { version = "0.1.0", features = ["writer", "strings"] } +itertools = { workspace = true } +js-source-scopes = { workspace = true } +sourcemap = { workspace = true } +symbolic-common = { workspace = true } +thiserror = { workspace = true } +tracing = { workspace = true } +watto = { workspace = true } [dev-dependencies] -symbolic-testutils = { path = "../symbolic-testutils" } +symbolic-testutils = { workspace = true } diff --git a/symbolic-symcache/Cargo.toml b/symbolic-symcache/Cargo.toml index b895bb3b..0998d172 100644 --- a/symbolic-symcache/Cargo.toml +++ b/symbolic-symcache/Cargo.toml @@ -23,19 +23,19 @@ exclude = [ all-features = true [dependencies] -symbolic-common = { version = "12.8.0", path = "../symbolic-common" } -symbolic-debuginfo = { version = "12.8.0", path = "../symbolic-debuginfo" } -symbolic-il2cpp = { version = "12.8.0", path = "../symbolic-il2cpp", optional = true } -thiserror = "1.0.39" -indexmap = "2.0.0" -tracing = "0.1.37" -watto = { version = "0.1.0", features = ["writer", "strings"] } +symbolic-common = { workspace = true } +symbolic-debuginfo = { workspace = true } +symbolic-il2cpp = { workspace = true, optional = true } +thiserror = { workspace = true } +indexmap = { workspace = true } +tracing = { workspace = true } +watto = { workspace = true } [dev-dependencies] -insta = { version = "1.28.0", features = ["yaml"] } -criterion = "0.5.1" -symbolic-testutils = { path = "../symbolic-testutils" } -similar-asserts = "1.4.2" +insta = { workspace = true } +criterion = { workspace = true } +symbolic-testutils = { workspace = true } +similar-asserts = { workspace = true } [features] bench = [] diff --git a/symbolic-unreal/Cargo.toml b/symbolic-unreal/Cargo.toml index a78f1b82..1547e190 100644 --- a/symbolic-unreal/Cargo.toml +++ b/symbolic-unreal/Cargo.toml @@ -26,19 +26,19 @@ all-features = true serde = ["dep:serde", "chrono/serde"] [dependencies] -anylog = "0.6.4" -bytes = "1.4.0" -chrono = { version = "0.4.23", default-features = false, features = ["std"] } -elementtree = "1.2.3" -flate2 = { version = "1.0.25", features = ["rust_backend"], default-features = false } -lazy_static = "1.4.0" -regex = "1.7.1" -scroll = { version = "0.12.0", features = ["derive"] } -serde = { version = "1.0.154", optional = true, features = ["derive"] } -thiserror = "1.0.39" -time = { version = "0.3.20", features = ["formatting"] } +anylog = { workspace = true } +bytes = { workspace = true } +chrono = { workspace = true } +elementtree = { workspace = true } +flate2 = { workspace = true } +lazy_static = { workspace = true } +regex = { workspace = true } +scroll = { workspace = true, features = ["derive"] } +serde = { workspace = true, optional = true } +thiserror = { workspace = true } +time = { workspace = true } [dev-dependencies] -insta = { version = "1.28.0", features = ["yaml"] } -symbolic-testutils = { path = "../symbolic-testutils" } -similar-asserts = "1.4.2" +insta = { workspace = true } +symbolic-testutils = { workspace = true } +similar-asserts = { workspace = true } diff --git a/symbolic/Cargo.toml b/symbolic/Cargo.toml index e95b2bc5..dfa844bd 100644 --- a/symbolic/Cargo.toml +++ b/symbolic/Cargo.toml @@ -34,12 +34,12 @@ unreal = ["symbolic-unreal"] unreal-serde = ["unreal", "common-serde", "symbolic-unreal/serde"] [dependencies] -symbolic-cfi = { version = "12.8.0", path = "../symbolic-cfi", optional = true } -symbolic-common = { version = "12.8.0", path = "../symbolic-common" } -symbolic-debuginfo = { version = "12.8.0", path = "../symbolic-debuginfo", optional = true } -symbolic-demangle = { version = "12.8.0", path = "../symbolic-demangle", optional = true } -symbolic-il2cpp = { version = "12.8.0", path = "../symbolic-il2cpp", optional = true } -symbolic-ppdb = { version = "12.8.0", path = "../symbolic-ppdb", optional = true } -symbolic-sourcemapcache = { version = "12.8.0", path = "../symbolic-sourcemapcache", optional = true } -symbolic-symcache = { version = "12.8.0", path = "../symbolic-symcache", optional = true } -symbolic-unreal = { version = "12.8.0", path = "../symbolic-unreal", optional = true } +symbolic-cfi = { workspace = true, optional = true } +symbolic-common = { workspace = true } +symbolic-debuginfo = { workspace = true, optional = true } +symbolic-demangle = { workspace = true, optional = true } +symbolic-il2cpp = { workspace = true, optional = true } +symbolic-ppdb = { workspace = true, optional = true } +symbolic-sourcemapcache = { workspace = true, optional = true } +symbolic-symcache = { workspace = true, optional = true } +symbolic-unreal = { workspace = true, optional = true }