crate_paths_cli_core/
item.rs1use crate::item_kind::ItemKind;
2use check_keyword::CheckKeyword as _;
3use getset::Getters;
4use inflector::Inflector as _;
5use serde::{Deserialize, Serialize};
6
7#[derive(Clone, Debug, Deserialize, Eq, Getters, Hash, PartialEq, Serialize)]
8#[getset(get = "pub")]
9pub struct ItemEntry {
10 crate_name: String,
11 item_name: String,
12 path: String,
13 kinds: Vec<ItemKind>,
14}
15
16impl ItemEntry {
17 pub fn new(crate_name: String, item_name: String, path: String, kinds: Vec<ItemKind>) -> Self {
18 Self {
19 crate_name,
20 item_name,
21 path,
22 kinds,
23 }
24 }
25
26 pub fn safe_name(&self) -> String {
27 match self.item_name.is_keyword() {
28 true => self.item_name.clone().into_safe(),
29 false => self.item_name.clone(),
30 }
31 }
32
33 pub fn full_path(&self) -> String {
34 format!("{}::{}", self.crate_name.to_snake_case(), self.path)
35 }
36
37 pub fn into_writable(&self) -> String {
38 let kinds_str = self
39 .kinds
40 .iter()
41 .map(|k| k.to_string().to_sentence_case().to_lowercase())
42 .collect::<Vec<_>>()
43 .join(" + ");
44 let item_kind = format!("pub {} `{}`", kinds_str, self.item_name());
45 format!(
46 r#"
47 /// {}
48 pub const {}: crate_paths::Path = crate_paths::Path::new("{}");
49 "#,
50 item_kind,
51 self.safe_name(),
52 self.full_path()
53 )
54 }
55}