Skip to content

Commit ed35c25

Browse files
committed
refactor(rust-examples): reorganize keyvalue server impls
Signed-off-by: Roman Volosatovs <rvolosatovs@riseup.net>
1 parent e7c0de3 commit ed35c25

File tree

2 files changed

+34
-34
lines changed
  • examples/rust
    • wasi-keyvalue-component-server/src
    • wasi-keyvalue-nats-server/src

2 files changed

+34
-34
lines changed

examples/rust/wasi-keyvalue-component-server/src/lib.rs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,18 @@ impl Bucket {
3939
}
4040
}
4141

42+
impl bindings::exports::wasi::keyvalue::store::Guest for Handler {
43+
type Bucket = Bucket;
44+
45+
fn open(identifier: String) -> Result<store::Bucket> {
46+
static STORE: OnceLock<Mutex<HashMap<String, Bucket>>> = OnceLock::new();
47+
let store = STORE.get_or_init(Mutex::default);
48+
let mut store = store.lock().expect("failed to lock store");
49+
let bucket = store.entry(identifier).or_default().clone();
50+
Ok(store::Bucket::new(bucket))
51+
}
52+
}
53+
4254
impl bindings::exports::wasi::keyvalue::store::GuestBucket for Bucket {
4355
fn get(&self, key: String) -> Result<Option<Vec<u8>>> {
4456
let bucket = self.read()?;
@@ -75,15 +87,3 @@ impl bindings::exports::wasi::keyvalue::store::GuestBucket for Bucket {
7587
Ok(KeyResponse { keys, cursor: None })
7688
}
7789
}
78-
79-
impl bindings::exports::wasi::keyvalue::store::Guest for Handler {
80-
type Bucket = Bucket;
81-
82-
fn open(identifier: String) -> Result<store::Bucket> {
83-
static STORE: OnceLock<Mutex<HashMap<String, Bucket>>> = OnceLock::new();
84-
let store = STORE.get_or_init(Mutex::default);
85-
let mut store = store.lock().expect("failed to lock store");
86-
let bucket = store.entry(identifier).or_default().clone();
87-
Ok(store::Bucket::new(bucket))
88-
}
89-
}

examples/rust/wasi-keyvalue-nats-server/src/main.rs

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,28 @@ impl Server {
137137
}
138138
}
139139

140+
impl bindings::exports::wasi::keyvalue::store::Handler<Option<HeaderMap>> for Server {
141+
// NOTE: Resource handle returned is just the `identifier` itself
142+
#[instrument(level = "trace", skip(_cx), ret)]
143+
async fn open(
144+
&self,
145+
_cx: Option<HeaderMap>,
146+
identifier: String,
147+
) -> anyhow::Result<Result<ResourceOwn<store::Bucket>>> {
148+
let identifier = Bytes::from(identifier);
149+
{
150+
// first, optimistically try read-only lock
151+
let store = self.0.read().await;
152+
if store.contains_key(&identifier) {
153+
return Ok(Ok(ResourceOwn::from(identifier)));
154+
}
155+
}
156+
let mut store = self.0.write().await;
157+
store.entry(identifier.clone()).or_default();
158+
Ok(Ok(ResourceOwn::from(identifier)))
159+
}
160+
}
161+
140162
impl bindings::exports::wasi::keyvalue::store::HandlerBucket<Option<HeaderMap>> for Server {
141163
#[instrument(level = "trace", skip(_cx), ret)]
142164
async fn get(
@@ -209,25 +231,3 @@ impl bindings::exports::wasi::keyvalue::store::HandlerBucket<Option<HeaderMap>>
209231
Ok(Ok(KeyResponse { keys, cursor: None }))
210232
}
211233
}
212-
213-
impl bindings::exports::wasi::keyvalue::store::Handler<Option<HeaderMap>> for Server {
214-
// NOTE: Resource handle returned is just the `identifier` itself
215-
#[instrument(level = "trace", skip(_cx), ret)]
216-
async fn open(
217-
&self,
218-
_cx: Option<HeaderMap>,
219-
identifier: String,
220-
) -> anyhow::Result<Result<ResourceOwn<store::Bucket>>> {
221-
let identifier = Bytes::from(identifier);
222-
{
223-
// first, optimistically try read-only lock
224-
let store = self.0.read().await;
225-
if store.contains_key(&identifier) {
226-
return Ok(Ok(ResourceOwn::from(identifier)));
227-
}
228-
}
229-
let mut store = self.0.write().await;
230-
store.entry(identifier.clone()).or_default();
231-
Ok(Ok(ResourceOwn::from(identifier)))
232-
}
233-
}

0 commit comments

Comments
 (0)