#![allow(missing_docs)]
use super::cond::Conditional;
use super::macros::Comment;
use super::text::Text;
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[non_exhaustive]
pub enum FilesContent<T = ()> {
Entry(FileEntry<T>),
Conditional(Conditional<T, FilesContent<T>>),
Comment(Comment<T>),
Blank,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(deny_unknown_fields))]
pub struct FileEntry<T = ()> {
pub directives: Vec<FileDirective>,
pub path: Option<FilePath>,
pub data: T,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[non_exhaustive]
pub enum FileDirective {
Defattr(Box<DefattrFields>),
Attr(Box<AttrFields>),
Dir,
Doc,
License,
Config(Vec<ConfigFlag>),
Ghost,
Verify { negate: bool, checks: Vec<VerifyCheck> },
Lang(Text),
Caps(Text),
Artifact,
MissingOk,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(deny_unknown_fields))]
pub struct DefattrFields {
pub fmode: AttrField,
pub user: AttrField,
pub group: AttrField,
pub dmode: Option<AttrField>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(deny_unknown_fields))]
pub struct AttrFields {
pub mode: AttrField,
pub user: AttrField,
pub group: AttrField,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[non_exhaustive]
pub enum AttrField {
Default,
Numeric(u32),
Name(Text),
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[non_exhaustive]
pub enum ConfigFlag {
NoReplace,
MissingOk,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[non_exhaustive]
pub enum VerifyCheck {
Md5,
FileDigest,
Size,
Link,
User,
Group,
Mtime,
Mode,
Rdev,
Caps,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(deny_unknown_fields))]
pub struct FilePath {
pub path: Text,
}