pub use add_attributes::AddAttributes;
pub use append_children::AppendChildren;
pub use change_text::ChangeText;
pub use insert_node::InsertNode;
pub use remove_attributes::RemoveAttributes;
pub use remove_node::RemoveNode;
pub use replace_node::ReplaceNode;
use std::fmt;
mod add_attributes;
mod append_children;
mod change_text;
mod insert_node;
mod remove_attributes;
mod remove_node;
mod replace_node;
pub type NodeIdx = usize;
#[derive(PartialEq)]
pub enum Patch<'a, NS, TAG, ATT, VAL, EVENT, MSG> {
InsertNode(InsertNode<'a, NS, TAG, ATT, VAL, EVENT, MSG>),
AppendChildren(AppendChildren<'a, NS, TAG, ATT, VAL, EVENT, MSG>),
RemoveNode(RemoveNode<'a, TAG>),
ReplaceNode(ReplaceNode<'a, NS, TAG, ATT, VAL, EVENT, MSG>),
AddAttributes(AddAttributes<'a, NS, TAG, ATT, VAL, EVENT, MSG>),
RemoveAttributes(RemoveAttributes<'a, NS, TAG, ATT, VAL, EVENT, MSG>),
ChangeText(ChangeText<'a>),
}
impl<'a, NS, TAG, ATT, VAL, EVENT, MSG>
Patch<'a, NS, TAG, ATT, VAL, EVENT, MSG>
{
pub fn node_idx(&self) -> NodeIdx {
match self {
Patch::InsertNode(ic) => ic.node_idx,
Patch::AppendChildren(ac) => ac.node_idx,
Patch::RemoveNode(rn) => rn.node_idx,
Patch::ReplaceNode(rn) => rn.node_idx,
Patch::AddAttributes(at) => at.node_idx,
Patch::RemoveAttributes(rt) => rt.node_idx,
Patch::ChangeText(ct) => ct.node_idx,
}
}
pub fn tag(&self) -> Option<&TAG> {
match self {
Patch::InsertNode(ic) => ic.tag,
Patch::AppendChildren(ac) => Some(ac.tag),
Patch::RemoveNode(rn) => rn.tag,
Patch::ReplaceNode(rn) => rn.tag,
Patch::AddAttributes(at) => Some(at.tag),
Patch::RemoveAttributes(rt) => Some(rt.tag),
Patch::ChangeText(_) => None,
}
}
pub fn priority(&self) -> usize {
match self {
Patch::AddAttributes(..) => 1,
Patch::RemoveAttributes(..) => 2,
Patch::ChangeText(..) => 3,
Patch::ReplaceNode(..) => 4,
Patch::AppendChildren(..) => 5,
Patch::InsertNode(..) => 6,
Patch::RemoveNode(..) => 7,
}
}
}
impl<'a, NS, TAG, ATT, VAL, EVENT, MSG> fmt::Debug
for Patch<'a, NS, TAG, ATT, VAL, EVENT, MSG>
where
NS: fmt::Debug,
TAG: fmt::Debug,
ATT: fmt::Debug,
VAL: fmt::Debug,
{
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self {
Patch::InsertNode(ic) => ic.fmt(f),
Patch::AppendChildren(ac) => ac.fmt(f),
Patch::RemoveNode(rn) => rn.fmt(f),
Patch::ReplaceNode(rn) => rn.fmt(f),
Patch::AddAttributes(at) => at.fmt(f),
Patch::RemoveAttributes(rt) => rt.fmt(f),
Patch::ChangeText(ct) => ct.fmt(f),
}
}
}
impl<'a, NS, TAG, ATT, VAL, EVENT, MSG> From<ChangeText<'a>>
for Patch<'a, NS, TAG, ATT, VAL, EVENT, MSG>
{
fn from(ct: ChangeText<'a>) -> Self {
Patch::ChangeText(ct)
}
}
impl<'a, NS, TAG, ATT, VAL, EVENT, MSG>
From<InsertNode<'a, NS, TAG, ATT, VAL, EVENT, MSG>>
for Patch<'a, NS, TAG, ATT, VAL, EVENT, MSG>
{
fn from(ic: InsertNode<'a, NS, TAG, ATT, VAL, EVENT, MSG>) -> Self {
Patch::InsertNode(ic)
}
}
impl<'a, NS, TAG, ATT, VAL, EVENT, MSG>
From<AppendChildren<'a, NS, TAG, ATT, VAL, EVENT, MSG>>
for Patch<'a, NS, TAG, ATT, VAL, EVENT, MSG>
{
fn from(ac: AppendChildren<'a, NS, TAG, ATT, VAL, EVENT, MSG>) -> Self {
Patch::AppendChildren(ac)
}
}
impl<'a, NS, TAG, ATT, VAL, EVENT, MSG> From<RemoveNode<'a, TAG>>
for Patch<'a, NS, TAG, ATT, VAL, EVENT, MSG>
{
fn from(rc: RemoveNode<'a, TAG>) -> Self {
Patch::RemoveNode(rc)
}
}
impl<'a, NS, TAG, ATT, VAL, EVENT, MSG>
From<ReplaceNode<'a, NS, TAG, ATT, VAL, EVENT, MSG>>
for Patch<'a, NS, TAG, ATT, VAL, EVENT, MSG>
{
fn from(rn: ReplaceNode<'a, NS, TAG, ATT, VAL, EVENT, MSG>) -> Self {
Patch::ReplaceNode(rn)
}
}
impl<'a, NS, TAG, ATT, VAL, EVENT, MSG>
From<AddAttributes<'a, NS, TAG, ATT, VAL, EVENT, MSG>>
for Patch<'a, NS, TAG, ATT, VAL, EVENT, MSG>
{
fn from(at: AddAttributes<'a, NS, TAG, ATT, VAL, EVENT, MSG>) -> Self {
Patch::AddAttributes(at)
}
}
impl<'a, NS, TAG, ATT, VAL, EVENT, MSG>
From<RemoveAttributes<'a, NS, TAG, ATT, VAL, EVENT, MSG>>
for Patch<'a, NS, TAG, ATT, VAL, EVENT, MSG>
{
fn from(rt: RemoveAttributes<'a, NS, TAG, ATT, VAL, EVENT, MSG>) -> Self {
Patch::RemoveAttributes(rt)
}
}