feat: rename Org::check to Org::validate

This commit is contained in:
PoiScript 2019-09-13 14:54:26 +08:00
parent 4d504ffe9b
commit f74feb82c9
3 changed files with 48 additions and 22 deletions

View file

@ -3,7 +3,7 @@ use indextree::NodeId;
use crate::elements::*; use crate::elements::*;
use crate::Org; use crate::Org;
/// Orgize Error /// Orgize Validation Error
#[derive(Debug)] #[derive(Debug)]
pub enum OrgizeError { pub enum OrgizeError {
/// Expect this node has children /// Expect this node has children
@ -27,7 +27,8 @@ pub enum OrgizeError {
} }
impl Org<'_> { impl Org<'_> {
pub fn check(&self) -> Result<(), OrgizeError> { /// Validate an `Org` struct.
pub fn validate(&self) -> Result<(), OrgizeError> {
for node_id in self.root.descendants(&self.arena) { for node_id in self.root.descendants(&self.arena) {
let node = &self.arena[node_id]; let node = &self.arena[node_id];
match node.get() { match node.get() {
@ -122,4 +123,10 @@ impl Org<'_> {
} }
Ok(()) Ok(())
} }
#[deprecated(since = "0.3.1", note = "rename to validate")]
/// Validate an `Org` struct.
pub fn check(&self) -> Result<(), OrgizeError> {
self.validate()
}
} }

View file

@ -85,7 +85,7 @@ impl HeadlineNode {
self.title_mut(org).raw = content; self.title_mut(org).raw = content;
if cfg!(debug_assertions) { if cfg!(debug_assertions) {
org.check().unwrap(); org.validate().unwrap();
} }
} }
@ -116,7 +116,7 @@ impl HeadlineNode {
} }
if cfg!(debug_assertions) { if cfg!(debug_assertions) {
org.check().unwrap(); org.validate().unwrap();
} }
} }
@ -169,7 +169,7 @@ impl HeadlineNode {
self.node.detach(&mut org.arena); self.node.detach(&mut org.arena);
if cfg!(debug_assertions) { if cfg!(debug_assertions) {
org.check().unwrap(); org.validate().unwrap();
} }
} }
@ -207,7 +207,7 @@ impl HeadlineNode {
self.node.append(headline.node, &mut org.arena); self.node.append(headline.node, &mut org.arena);
if cfg!(debug_assertions) { if cfg!(debug_assertions) {
org.check().unwrap(); org.validate().unwrap();
} }
Ok(()) Ok(())
@ -231,7 +231,7 @@ impl HeadlineNode {
} }
if cfg!(debug_assertions) { if cfg!(debug_assertions) {
org.check().unwrap(); org.validate().unwrap();
} }
Ok(()) Ok(())
@ -255,7 +255,7 @@ impl HeadlineNode {
self.node.insert_before(headline.node, &mut org.arena); self.node.insert_before(headline.node, &mut org.arena);
if cfg!(debug_assertions) { if cfg!(debug_assertions) {
org.check().unwrap(); org.validate().unwrap();
} }
Ok(()) Ok(())
@ -281,7 +281,7 @@ impl HeadlineNode {
self.node.insert_after(headline.node, &mut org.arena); self.node.insert_after(headline.node, &mut org.arena);
if cfg!(debug_assertions) { if cfg!(debug_assertions) {
org.check().unwrap(); org.validate().unwrap();
} }
Ok(()) Ok(())
@ -345,7 +345,7 @@ impl DocumentNode {
} }
if cfg!(debug_assertions) { if cfg!(debug_assertions) {
org.check().unwrap(); org.validate().unwrap();
} }
} }
@ -361,7 +361,7 @@ impl DocumentNode {
org.root.append(headline.node, &mut org.arena); org.root.append(headline.node, &mut org.arena);
if cfg!(debug_assertions) { if cfg!(debug_assertions) {
org.check().unwrap(); org.validate().unwrap();
} }
Ok(()) Ok(())
@ -383,7 +383,7 @@ impl DocumentNode {
} }
if cfg!(debug_assertions) { if cfg!(debug_assertions) {
org.check().unwrap(); org.validate().unwrap();
} }
Ok(()) Ok(())

View file

@ -13,12 +13,13 @@ pub struct Org<'a> {
} }
#[derive(Debug)] #[derive(Debug)]
pub enum Event<'a> { pub enum Event<'a, 'b> {
Start(&'a Element<'a>), Start(&'b Element<'a>),
End(&'a Element<'a>), End(&'b Element<'a>),
} }
impl<'a> Org<'a> { impl<'a> Org<'a> {
/// Create a new empty Org struct
pub fn new() -> Org<'static> { pub fn new() -> Org<'static> {
let mut arena = Arena::new(); let mut arena = Arena::new();
let root = arena.new_node(Element::Document); let root = arena.new_node(Element::Document);
@ -26,10 +27,12 @@ impl<'a> Org<'a> {
Org { arena, root } Org { arena, root }
} }
/// Create a new Org struct from parsing `text`, using the default ParseConfig
pub fn parse(text: &'a str) -> Org<'a> { pub fn parse(text: &'a str) -> Org<'a> {
Org::parse_with_config(text, &ParseConfig::default()) Org::parse_with_config(text, &ParseConfig::default())
} }
/// Create a new Org struct from parsing `text`, using a custom ParseConfig
pub fn parse_with_config(content: &'a str, config: &ParseConfig) -> Org<'a> { pub fn parse_with_config(content: &'a str, config: &ParseConfig) -> Org<'a> {
let mut org = Org::new(); let mut org = Org::new();
@ -43,30 +46,39 @@ impl<'a> Org<'a> {
); );
if cfg!(debug_assertions) { if cfg!(debug_assertions) {
org.check().unwrap(); org.validate().unwrap();
} }
org org
} }
/// Return a DocumentNode
pub fn document(&self) -> DocumentNode { pub fn document(&self) -> DocumentNode {
DocumentNode::new(self) DocumentNode::new(self)
} }
pub fn headlines(&self) -> impl Iterator<Item = HeadlineNode> + '_ { /// Return an iterator of HeadlineNode
pub fn headlines<'b>(&'b self) -> impl Iterator<Item = HeadlineNode> + 'b {
self.root self.root
.descendants(&self.arena) .descendants(&self.arena)
.skip(1) .skip(1)
.filter_map(move |node| match self.arena[node].get() { .filter_map(move |node| match &self.arena[node].get() {
&Element::Headline { level } => Some(HeadlineNode::new(node, level, self)), Element::Headline { level } => Some(HeadlineNode::new(node, *level, self)),
_ => None, _ => None,
}) })
} }
/// Return a refrence to underlay arena
pub fn arena(&self) -> &Arena<Element<'a>> { pub fn arena(&self) -> &Arena<Element<'a>> {
&self.arena &self.arena
} }
/// Return a mutual reference to underlay arena
pub fn arena_mut(&mut self) -> &mut Arena<Element<'a>> {
&mut self.arena
}
/// Create a new headline and return it's HeadlineNode
pub fn new_headline(&mut self, title: Title<'a>) -> HeadlineNode { pub fn new_headline(&mut self, title: Title<'a>) -> HeadlineNode {
let level = title.level; let level = title.level;
let title_raw = title.raw.clone(); let title_raw = title.raw.clone();
@ -83,10 +95,11 @@ impl<'a> Org<'a> {
headline_node headline_node
} }
pub fn iter(&self) -> impl Iterator<Item = Event<'_>> + '_ { /// Return an iterator of Event
pub fn iter<'b>(&'b self) -> impl Iterator<Item = Event<'a, 'b>> + 'b {
self.root.traverse(&self.arena).map(move |edge| match edge { self.root.traverse(&self.arena).map(move |edge| match edge {
NodeEdge::Start(e) => Event::Start(self.arena[e].get()), NodeEdge::Start(node) => Event::Start(self.arena[node].get()),
NodeEdge::End(e) => Event::End(self.arena[e].get()), NodeEdge::End(node) => Event::End(self.arena[node].get()),
}) })
} }
@ -131,6 +144,12 @@ impl<'a> Org<'a> {
} }
} }
impl Default for Org<'static> {
fn default() -> Self {
Org::new()
}
}
#[cfg(feature = "ser")] #[cfg(feature = "ser")]
use serde::{ser::Serializer, Serialize}; use serde::{ser::Serializer, Serialize};