Skip to main content

link_cli/
named_links.rs

1//! Link-backed names facade matching the C# `NamedLinks<uint>` role.
2
3use anyhow::Result;
4
5use crate::link_storage::LinkStorage;
6use crate::unicode_string_storage::UnicodeStringStorage;
7
8pub struct NamedLinks<'a> {
9    storage: UnicodeStringStorage<'a>,
10}
11
12impl<'a> NamedLinks<'a> {
13    pub fn new(links: &'a mut LinkStorage) -> Result<Self> {
14        Ok(UnicodeStringStorage::new(links)?.into_named_links())
15    }
16
17    pub(crate) fn from_storage(storage: UnicodeStringStorage<'a>) -> Self {
18        Self { storage }
19    }
20
21    pub fn set_name_for_external_reference(&mut self, link: u32, name: &str) -> Result<u32> {
22        self.storage.set_name_for_external_reference(link, name)
23    }
24
25    pub fn set_name(&mut self, link: u32, name: &str) -> Result<u32> {
26        self.storage.set_name(link, name)
27    }
28
29    pub fn get_name_by_external_reference(&self, link: u32) -> Result<Option<String>> {
30        self.storage.get_name_by_external_reference(link)
31    }
32
33    pub fn get_name(&self, link: u32) -> Result<Option<String>> {
34        self.storage.get_name(link)
35    }
36
37    pub fn get_by_name(&mut self, name: &str) -> Result<Option<u32>> {
38        self.storage.get_by_name(name)
39    }
40
41    pub fn get_external_reference_by_name(&mut self, name: &str) -> Result<Option<u32>> {
42        self.storage.get_external_reference_by_name(name)
43    }
44
45    pub fn remove_name(&mut self, link: u32) -> Result<()> {
46        self.storage.remove_name(link)
47    }
48
49    pub fn remove_name_by_external_reference(&mut self, external_reference_id: u32) -> Result<()> {
50        self.storage
51            .remove_name_by_external_reference(external_reference_id)
52    }
53
54    pub fn unicode_storage(&self) -> &UnicodeStringStorage<'a> {
55        &self.storage
56    }
57
58    pub fn unicode_storage_mut(&mut self) -> &mut UnicodeStringStorage<'a> {
59        &mut self.storage
60    }
61}