feat: add basic vessel
This commit is contained in:
commit
4fc57350ca
2
.drone.yml
Normal file
2
.drone.yml
Normal file
@ -0,0 +1,2 @@
|
||||
kind: template
|
||||
load: cuddle-rust-lib-plan.yaml
|
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
target/
|
||||
.cuddle/
|
16
Cargo.lock
generated
Normal file
16
Cargo.lock
generated
Normal file
@ -0,0 +1,16 @@
|
||||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 4
|
||||
|
||||
[[package]]
|
||||
name = "anyhow"
|
||||
version = "1.0.71"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8"
|
||||
|
||||
[[package]]
|
||||
name = "vessel"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
]
|
8
Cargo.toml
Normal file
8
Cargo.toml
Normal file
@ -0,0 +1,8 @@
|
||||
[workspace]
|
||||
members = ["crates/*"]
|
||||
resolver = "2"
|
||||
|
||||
[workspace.dependencies]
|
||||
vessel = { path = "crates/vessel" }
|
||||
|
||||
anyhow = { version = "1.0.71" }
|
9
crates/vessel/Cargo.toml
Normal file
9
crates/vessel/Cargo.toml
Normal file
@ -0,0 +1,9 @@
|
||||
[package]
|
||||
name = "vessel"
|
||||
version = "0.1.0"
|
||||
edition = "2024"
|
||||
description = "A context propogation struct. Carries cancellation, and other useful items transparently through an application"
|
||||
license = "MIT"
|
||||
|
||||
[dependencies]
|
||||
anyhow.workspace = true
|
77
crates/vessel/src/lib.rs
Normal file
77
crates/vessel/src/lib.rs
Normal file
@ -0,0 +1,77 @@
|
||||
use std::collections::BTreeMap;
|
||||
|
||||
#[derive(Default, Clone, Debug)]
|
||||
pub struct Vessel {
|
||||
value_bag: BTreeMap<String, String>,
|
||||
}
|
||||
|
||||
impl Vessel {
|
||||
pub fn new() -> Self {
|
||||
Self {
|
||||
value_bag: BTreeMap::default(),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn with_value(&self, key: &str, value: &str) -> Self {
|
||||
let mut value_bag = self.value_bag.clone();
|
||||
|
||||
value_bag.insert(key.into(), value.into());
|
||||
|
||||
Self { value_bag }
|
||||
}
|
||||
|
||||
pub fn get_value(&self, key: &str) -> Option<&String> {
|
||||
self.value_bag.get(key)
|
||||
}
|
||||
|
||||
pub fn get_values(&self) -> &BTreeMap<String, String> {
|
||||
&self.value_bag
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use std::collections::BTreeMap;
|
||||
|
||||
use crate::Vessel;
|
||||
|
||||
#[test]
|
||||
fn can_add_value() {
|
||||
let vessel = Vessel::default();
|
||||
|
||||
let new_vessel = vessel.with_value("some-key", "some-value");
|
||||
|
||||
assert_eq!(
|
||||
&BTreeMap::from([("some-key".into(), "some-value".into())]),
|
||||
new_vessel.get_values()
|
||||
)
|
||||
}
|
||||
#[test]
|
||||
fn is_immutable() {
|
||||
let vessel = Vessel::default();
|
||||
|
||||
let new_vessel = vessel.with_value("some-key", "some-value");
|
||||
|
||||
assert_ne!(vessel.get_values(), new_vessel.get_values())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn get_value() {
|
||||
let vessel = Vessel::default();
|
||||
|
||||
let new_vessel = vessel.with_value("some-key", "some-value");
|
||||
|
||||
assert_eq!(
|
||||
Some(&"some-value".to_string()),
|
||||
new_vessel.get_value("some-key")
|
||||
)
|
||||
}
|
||||
#[test]
|
||||
fn value_not_found() {
|
||||
let vessel = Vessel::default();
|
||||
|
||||
let new_vessel = vessel.with_value("some-key", "some-value");
|
||||
|
||||
assert_eq!(None, new_vessel.get_value("bogus"))
|
||||
}
|
||||
}
|
17
cuddle.yaml
Normal file
17
cuddle.yaml
Normal file
@ -0,0 +1,17 @@
|
||||
# yaml-language-server: $schema=https://git.front.kjuulh.io/kjuulh/cuddle/raw/branch/main/schemas/base.json
|
||||
|
||||
base: "git@git.front.kjuulh.io:kjuulh/cuddle-rust-lib-plan.git"
|
||||
|
||||
vars:
|
||||
service: "vessel"
|
||||
registry: kasperhermansen
|
||||
|
||||
please:
|
||||
project:
|
||||
owner: kjuulh
|
||||
repository: "vessel"
|
||||
branch: main
|
||||
settings:
|
||||
api_url: "https://git.front.kjuulh.io"
|
||||
actions:
|
||||
rust:
|
Loading…
x
Reference in New Issue
Block a user