saluki_core/runtime/state/
mod.rs1use stringtheory::MetaString;
6
7use crate::runtime::process::Id;
8
9mod dataspace;
10pub(crate) use self::dataspace::CURRENT_DATASPACE;
11pub use self::dataspace::{DataspaceRegistry, DataspaceUpdate, Subscription};
12
13mod resources;
14pub use self::resources::{
15 AcquireError, ResourceKind, ResourceLease, ResourceRegistry, ResourceRegistryAPIHandler, ResourceRegistryState,
16 ResourceRegistryWorker, ResourceSpecification, ResourceStatus,
17};
18
19#[derive(Clone, Debug, PartialEq, Eq, Hash)]
25pub enum Identifier {
26 Named(MetaString),
28
29 Numeric(usize),
31}
32
33impl Identifier {
34 pub fn named(name: impl Into<MetaString>) -> Self {
36 Self::Named(name.into())
37 }
38
39 pub fn numeric(id: usize) -> Self {
41 Self::Numeric(id)
42 }
43}
44
45impl From<&str> for Identifier {
46 fn from(s: &str) -> Self {
47 Self::Named(MetaString::from(s))
48 }
49}
50
51impl From<String> for Identifier {
52 fn from(s: String) -> Self {
53 Self::Named(MetaString::from(s))
54 }
55}
56
57impl From<MetaString> for Identifier {
58 fn from(s: MetaString) -> Self {
59 Self::Named(s)
60 }
61}
62
63impl From<usize> for Identifier {
64 fn from(id: usize) -> Self {
65 Self::Numeric(id)
66 }
67}
68
69impl From<Id> for Identifier {
70 fn from(id: Id) -> Self {
71 Self::Numeric(id.as_usize())
72 }
73}
74
75#[derive(Clone, Debug)]
82pub enum IdentifierFilter {
83 All,
85
86 Exact(Identifier),
88
89 Prefix(MetaString),
93}
94
95impl IdentifierFilter {
96 pub fn all() -> Self {
98 Self::All
99 }
100
101 pub fn exact(id: impl Into<Identifier>) -> Self {
103 Self::Exact(id.into())
104 }
105
106 pub fn prefix(prefix: impl Into<MetaString>) -> Self {
108 Self::Prefix(prefix.into())
109 }
110
111 pub fn matches(&self, id: &Identifier) -> bool {
113 match self {
114 Self::All => true,
115 Self::Exact(expected) => id == expected,
116 Self::Prefix(prefix) => match id {
117 Identifier::Named(name) => name.as_ref().starts_with(prefix.as_ref()),
118 Identifier::Numeric(_) => false,
119 },
120 }
121 }
122}