mod attribute;
mod block;
mod body;
pub(crate) mod de;
mod edit;
pub mod iter;
mod json_spec;
mod ser;
#[cfg(test)]
mod tests;
pub(crate) use self::json_spec::IntoJsonSpec;
pub use self::{
attribute::Attribute,
block::{Block, BlockBuilder, BlockLabel},
body::{Body, BodyBuilder},
};
use crate::Value;
use serde::Deserialize;
#[derive(Deserialize, Debug, PartialEq, Eq, Clone)]
pub enum Structure {
Attribute(Attribute),
Block(Block),
}
impl Structure {
pub fn is_attribute(&self) -> bool {
self.as_attribute().is_some()
}
pub fn is_block(&self) -> bool {
self.as_block().is_some()
}
pub fn into_attribute(self) -> Option<Attribute> {
match self {
Structure::Attribute(attr) => Some(attr),
Structure::Block(_) => None,
}
}
pub fn as_attribute(&self) -> Option<&Attribute> {
match self {
Structure::Attribute(attr) => Some(attr),
Structure::Block(_) => None,
}
}
pub fn as_attribute_mut(&mut self) -> Option<&mut Attribute> {
match self {
Structure::Attribute(attr) => Some(attr),
Structure::Block(_) => None,
}
}
pub fn into_block(self) -> Option<Block> {
match self {
Structure::Block(block) => Some(block),
Structure::Attribute(_) => None,
}
}
pub fn as_block(&self) -> Option<&Block> {
match self {
Structure::Block(block) => Some(block),
Structure::Attribute(_) => None,
}
}
pub fn as_block_mut(&mut self) -> Option<&mut Block> {
match self {
Structure::Block(block) => Some(block),
Structure::Attribute(_) => None,
}
}
}
impl From<Structure> for Value {
fn from(s: Structure) -> Value {
match s {
Structure::Attribute(attr) => attr.into(),
Structure::Block(block) => block.into(),
}
}
}
impl From<Attribute> for Structure {
fn from(attr: Attribute) -> Structure {
Structure::Attribute(attr)
}
}
impl From<Block> for Structure {
fn from(block: Block) -> Structure {
Structure::Block(block)
}
}