use draxl_ast::{NodeId, Span};
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum SurfacePatchOp {
Insert {
dest: SurfaceRankedDest,
fragment: SurfaceFragment,
span: Span,
},
Put {
slot: SurfaceSlotRef,
fragment: SurfaceFragment,
span: Span,
},
Replace {
target: SurfaceNodeRef,
fragment: SurfaceFragment,
span: Span,
},
Delete {
target: SurfaceNodeRef,
span: Span,
},
Move {
target: SurfaceNodeRef,
dest: SurfaceDest,
span: Span,
},
Set {
path: SurfacePath,
value: SurfaceValue,
span: Span,
},
Clear {
path: SurfacePath,
span: Span,
},
Attach {
node: SurfaceNodeRef,
target: SurfaceNodeRef,
span: Span,
},
Detach {
node: SurfaceNodeRef,
span: Span,
},
}
impl SurfacePatchOp {
pub fn span(&self) -> Span {
match self {
Self::Insert { span, .. }
| Self::Put { span, .. }
| Self::Replace { span, .. }
| Self::Delete { span, .. }
| Self::Move { span, .. }
| Self::Set { span, .. }
| Self::Clear { span, .. }
| Self::Attach { span, .. }
| Self::Detach { span, .. } => *span,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct SurfaceNodeRef {
pub id: NodeId,
pub span: Span,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum SurfaceSlotOwner {
File { span: Span },
Node(SurfaceNodeRef),
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct SurfaceSlotRef {
pub owner: SurfaceSlotOwner,
pub slot: String,
pub slot_span: Span,
pub span: Span,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct SurfaceRankedDest {
pub slot: SurfaceSlotRef,
pub rank: String,
pub rank_span: Span,
pub span: Span,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum SurfaceDest {
Ranked(SurfaceRankedDest),
Slot(SurfaceSlotRef),
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct SurfacePath {
pub node: SurfaceNodeRef,
pub segments: Vec<SurfacePathSegment>,
pub span: Span,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct SurfacePathSegment {
pub name: String,
pub span: Span,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct SurfaceValue {
pub kind: SurfaceValueKind,
pub span: Span,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum SurfaceValueKind {
Ident(String),
Str(String),
Int(i64),
Bool(bool),
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct SurfaceFragment {
pub source: String,
pub span: Span,
}