shapes_converter/shex_to_html/
name.rs1use serde::{Deserialize, Serialize};
2use std::path::{Path, PathBuf};
3#[derive(Serialize, Debug, PartialEq, Eq, Clone, Hash, Deserialize)]
6pub struct Name {
7 repr: String,
8 path: Option<PathBuf>,
9 href: Option<String>,
10 relative_href: Option<String>,
11 label: Option<String>,
12}
13
14impl Name {
15 pub fn new<P: AsRef<Path>>(str: &str, href: Option<&str>, target_folder: P) -> Name {
16 let local_name = str.replace(':', "_");
17 let local_name_html = format!("{local_name}.html");
18 Name {
19 repr: str.to_string(),
20 path: Some(
21 target_folder
22 .as_ref()
23 .join(Path::new(local_name_html.as_str())),
24 ),
25 href: href.map(|s| s.to_string()),
26 relative_href: Some(local_name_html),
27 label: None,
28 }
29 }
30
31 pub fn name(&self) -> String {
32 self.repr.to_string()
33 }
34
35 pub fn href(&self) -> Option<String> {
36 self.href.as_ref().map(|str| str.to_string())
37 }
38
39 pub fn get_path_localname(&self) -> Option<(PathBuf, String)> {
40 if let Some(href) = &self.relative_href {
41 self.path
42 .as_ref()
43 .map(|path| (path.to_owned(), href.to_string()))
44 } else {
45 None
46 }
47 }
48
49 pub fn as_path(&self) -> Option<PathBuf> {
50 self.path.as_ref().map(|path| path.to_owned())
51 }
52
53 pub fn as_href(&self) -> Option<String> {
54 self.href.as_ref().map(|href| href.to_string())
55 }
56
57 pub fn as_relative_href(&self) -> Option<String> {
58 self.relative_href.as_ref().map(|href| href.to_string())
59 }
60
61 pub fn label(&self) -> Option<String> {
62 self.label.clone()
63 }
64
65 pub fn add_label(&mut self, label: &str) {
66 self.label = Some(label.to_string());
67 }
68}