read_url/internal/
context.rs1use super::{
2 super::{context::*, errors::*, url::*},
3 internal_url::*,
4 metadata::*,
5 registered::*,
6};
7
8use kutil::io::reader::*;
9
10impl UrlContext {
11 pub fn internal_url(
13 self: &UrlContextRef,
14 path: String,
15 host: Option<String>,
16 query: Option<UrlQuery>,
17 fragment: Option<String>,
18 ) -> UrlRef {
19 InternalUrl::new(self, path, false, None, host, query, fragment).into()
20 }
21
22 pub fn register_internal_url(
24 self: &UrlContextRef,
25 path: String,
26 slashable: bool,
27 base_path: Option<String>,
28 format: Option<String>,
29 content: &[u8],
30 ) -> Result<(), UrlError> {
31 let mut url_registry = self.internal_url_registry.lock()?;
32 url_registry.insert(path, RegisteredInternalUrl::new(slashable, base_path, format, content));
33 Ok(())
34 }
35
36 pub fn deregister_internal_url(self: &UrlContextRef, path: &String) -> Result<(), UrlError> {
38 let mut url_registry = self.internal_url_registry.lock()?;
39 url_registry.remove(path);
40 Ok(())
41 }
42
43 pub fn update_internal_url(self: &UrlContextRef, path: &String, content: &[u8]) -> Result<bool, UrlError> {
45 let mut url_registry = self.internal_url_registry.lock()?;
46 Ok(match url_registry.get_mut(path) {
47 Some(registered_internal_url) => {
48 registered_internal_url.content = ReadableBuffer::new(content);
49 true
50 }
51
52 None => false,
53 })
54 }
55
56 pub fn register_global_internal_url(
58 path: String,
59 slashable: bool,
60 base_path: Option<String>,
61 format: Option<String>,
62 content: &[u8],
63 ) -> Result<(), UrlError> {
64 let mut url_registry = GLOBAL_INTERNAL_URL_REGISTRY.lock()?;
65 url_registry.insert(path, RegisteredInternalUrl::new(slashable, base_path, format, content));
66 Ok(())
67 }
68
69 pub fn deregister_global_internal_url(path: &String) -> Result<(), UrlError> {
71 let mut url_registry = GLOBAL_INTERNAL_URL_REGISTRY.lock()?;
72 url_registry.remove(path);
73 Ok(())
74 }
75
76 pub fn update_global_internal_url(path: &String, content: &[u8]) -> Result<bool, UrlError> {
78 let mut url_registry = GLOBAL_INTERNAL_URL_REGISTRY.lock()?;
79 Ok(match url_registry.get_mut(path) {
80 Some(registered_internal_url) => {
81 registered_internal_url.content = ReadableBuffer::new(content);
82 true
83 }
84
85 None => false,
86 })
87 }
88
89 pub fn read_internal_url(self: &UrlContextRef, path: &String) -> Result<Option<ReadableBufferReader>, UrlError> {
93 let url_registry = self.internal_url_registry.lock()?;
95 if let Some(registered_internal_url) = url_registry.get(path) {
96 return Ok(Some(registered_internal_url.content.reader()));
97 }
98
99 let url_registry = GLOBAL_INTERNAL_URL_REGISTRY.lock()?;
101 Ok(url_registry.get(path).map(|url| url.content.reader()))
102 }
103
104 pub fn internal_url_metadata(self: &UrlContextRef, path: &String) -> Result<Option<InternalUrlMetadata>, UrlError> {
108 let url_registry = self.internal_url_registry.lock()?;
110 if let Some(registered_internal_url) = url_registry.get(path) {
111 return Ok(Some(registered_internal_url.metadata.clone()));
112 }
113
114 let url_registry = GLOBAL_INTERNAL_URL_REGISTRY.lock()?;
116 Ok(url_registry.get(path).map(|url| url.metadata.clone()))
117 }
118}