"dtoa",
]
+[[package]]
+name = "educe"
+version = "0.4.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c07b7cc9cd8c08d10db74fca3b20949b9b6199725c04a0cce6d543496098fcac"
+dependencies = [
+ "enum-ordinalize",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
[[package]]
name = "ego-tree"
version = "0.6.2"
"syn",
]
+[[package]]
+name = "enum-ordinalize"
+version = "3.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2170fc0efee383079a8bdd05d6ea2a184d2a0f07a1c1dcabdb2fd5e9f24bc36c"
+dependencies = [
+ "num-bigint",
+ "num-traits",
+ "proc-macro2",
+ "quote",
+ "rustc_version",
+ "syn",
+]
+
[[package]]
name = "enum_dispatch"
version = "0.3.8"
"derive-into-owned",
"digest 0.10.3",
"downcast-rs",
+ "educe",
"either",
"enum-map",
"enum_dispatch",
type S: SomeSpec;
fn parse(s: String) -> Result<Self::T,AE>;
}
-#[derive(Debug,Copy,Clone)]
+#[derive(Debug,Copy,Clone,Educe)]
+#[educe(Default)]
pub struct SpecParseToml<T>(pub PhantomData<T>);
impl<T:DeserializeOwned+SomeSpec> SpecParse for SpecParseToml<T> {
type T = T;
spec
}
}
-impl<T> SpecParseToml<T> { pub fn new() -> Self { Self(default()) } }
+impl<T> SpecParseToml<T> { pub fn new() -> Self { default() } }
+#[derive(Educe)]
+#[educe(Default)]
pub struct SpecRaw<T>(pub PhantomData<T>);
impl<T:SomeSpec> SpecParse for SpecRaw<T> {
type T = String;
#[throws(AE)]
fn parse(buf: String) -> String { buf }
}
-impl<T> SpecRaw<T> { pub fn new() -> Self { Self(default()) } }
+impl<T> SpecRaw<T> { pub fn new() -> Self { default() } }
pub fn spec_arg_is_path(specname: &str) -> Option<String> {
if specname.contains('/') {
pub use derive_more::*;
pub use digest::Digest;
pub use downcast_rs::{impl_downcast, Downcast};
+pub use educe::Educe;
pub use either::{Either, Left, Right};
pub use enum_dispatch::enum_dispatch;
pub use enum_map::{Enum, EnumMap};