vimwiki_core/lang/elements/blocks/
headers.rs1use crate::{
2 lang::elements::{
3 InlineElement, InlineElementContainer, IntoChildren, Located,
4 },
5 StrictEq,
6};
7use derive_more::{Constructor, Index, IndexMut, IntoIterator};
8use serde::{Deserialize, Serialize};
9
10#[derive(
11 Constructor,
12 Clone,
13 Debug,
14 Eq,
15 PartialEq,
16 Hash,
17 Index,
18 IndexMut,
19 IntoIterator,
20 Serialize,
21 Deserialize,
22)]
23pub struct Header<'a> {
24 #[index]
26 #[index_mut]
27 #[into_iterator(owned, ref, ref_mut)]
28 pub content: InlineElementContainer<'a>,
29
30 pub level: usize,
32
33 pub centered: bool,
35}
36
37impl<'a> Header<'a> {
38 pub const MIN_LEVEL: usize = 1;
40
41 pub const MAX_LEVEL: usize = 6;
43}
44
45impl Header<'_> {
46 pub fn to_borrowed(&self) -> Header {
47 Header {
48 level: self.level,
49 content: self.content.to_borrowed(),
50 centered: self.centered,
51 }
52 }
53
54 pub fn into_owned(self) -> Header<'static> {
55 Header {
56 level: self.level,
57 content: self.content.into_owned(),
58 centered: self.centered,
59 }
60 }
61}
62
63impl<'a> IntoChildren for Header<'a> {
64 type Child = Located<InlineElement<'a>>;
65
66 fn into_children(self) -> Vec<Self::Child> {
67 self.content.into_children()
68 }
69}
70
71impl<'a> StrictEq for Header<'a> {
72 fn strict_eq(&self, other: &Self) -> bool {
74 self.level == other.level
75 && self.centered == other.centered
76 && self.content.strict_eq(&other.content)
77 }
78}