#[cfg(feature = "resolve-path")]
use crate::traits::vfs::OwnedPathType;
#[doc(hidden)]
pub const HAS_FIELD_MAX_LEN: usize = dir_structure_resolve_core::MAX_LEN;
#[cfg(feature = "resolve-path")]
#[cfg_attr(docsrs, doc(cfg(feature = "resolve-path")))]
pub trait HasField<const NAME: [char; HAS_FIELD_MAX_LEN]> {
type Inner;
fn resolve_path<P: OwnedPathType>(p: P) -> P;
}
pub trait HasFieldMaybeNewtype<const NAME: [char; HAS_FIELD_MAX_LEN]>: HasField<NAME> {
type ReaderType;
fn parse(read: Self::ReaderType) -> Self::Inner;
}
pub trait HasFieldNoNewtype<const NAME: [char; HAS_FIELD_MAX_LEN]>: HasField<NAME> {}
impl<const NAME: [char; HAS_FIELD_MAX_LEN], S, T> HasFieldMaybeNewtype<NAME> for S
where
S: HasFieldNoNewtype<NAME, Inner = T>,
{
type ReaderType = T;
fn parse(read: Self::ReaderType) -> Self::Inner {
read
}
}
#[cfg(feature = "resolve-path")]
#[cfg_attr(docsrs, doc(cfg(feature = "resolve-path")))]
pub trait DynamicHasField {
type Inner;
fn resolve_path<P: OwnedPathType>(p: P, name: &str) -> P;
}
pub trait DynamicHasFieldNoNewtype: DynamicHasField {}
pub trait DynamicHasFieldMaybeNewtype: DynamicHasField {
type ReaderType;
fn parse(read: Self::ReaderType) -> Self::Inner;
}
impl<S, T> DynamicHasFieldMaybeNewtype for S
where
S: DynamicHasFieldNoNewtype<Inner = T>,
{
type ReaderType = T;
fn parse(read: Self::ReaderType) -> Self::Inner {
read
}
}
#[cfg(all(feature = "derive", feature = "resolve-path"))]
#[cfg_attr(docsrs, doc(cfg(all(feature = "derive", feature = "resolve-path"))))]
pub use dir_structure_macros::load_path;
#[cfg(all(feature = "derive", feature = "resolve-path"))]
#[cfg_attr(docsrs, doc(cfg(all(feature = "derive", feature = "resolve-path"))))]
pub use dir_structure_macros::resolve_path;