docx_reader/documents/elements/
instr_pageref.rs1use serde::Serialize;
2
3#[derive(Serialize, Debug, Clone, PartialEq, Default)]
5#[serde(rename_all = "camelCase")]
6pub struct InstrPAGEREF {
7 pub page_ref: String,
8 pub hyperlink: bool,
9 pub relative_position: bool,
10}
11
12impl InstrPAGEREF {
13 pub fn new(r: impl Into<String>) -> Self {
14 Self {
15 page_ref: r.into(),
16 ..Default::default()
17 }
18 }
19
20 pub fn hyperlink(mut self) -> Self {
21 self.hyperlink = true;
22 self
23 }
24
25 pub fn relative_position(mut self) -> Self {
26 self.relative_position = true;
27 self
28 }
29}
30
31impl std::str::FromStr for InstrPAGEREF {
32 type Err = ();
33
34 fn from_str(instr: &str) -> Result<Self, Self::Err> {
35 let mut s = instr.split(' ');
36 let text = s.next();
37 let mut page_ref = InstrPAGEREF::new(text.unwrap_or_default());
38 loop {
39 if let Some(i) = s.next() {
40 match i {
41 "\\h" => page_ref = page_ref.hyperlink(),
42 "\\p" => page_ref = page_ref.relative_position(),
43 _ => {}
44 }
45 } else {
46 return Ok(page_ref);
47 }
48 }
49 }
50}