1use 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}