Initial commit

This commit is contained in:
soup 2024-05-14 22:54:13 -04:00
commit 3c4aeef1cc
No known key found for this signature in database
4 changed files with 66 additions and 0 deletions

1
.gitignore vendored Normal file
View file

@ -0,0 +1 @@
/target

7
Cargo.lock generated Normal file
View file

@ -0,0 +1,7 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "stilts"
version = "0.1.0"

6
Cargo.toml Normal file
View file

@ -0,0 +1,6 @@
[package]
name = "stilts"
version = "0.1.0"
edition = "2021"
[dependencies]

52
src/lib.rs Normal file
View file

@ -0,0 +1,52 @@
pub struct OutOfSpace;
pub trait Push<T> {
fn push(&mut self, value: T) {
let _ = self.push_checked(value);
}
fn push_checked(&mut self, value: T) -> Result<(), OutOfSpace> {
self.push(value);
Ok(())
}
}
impl<T> Push<T> for () {
fn push(&mut self, _: T) {
}
}
impl<T> Push<T> for Vec<T> {
fn push(&mut self, value: T) {
self.push(value)
}
}
impl<T> Push<T> for Option<T> {
fn push(&mut self, value: T) {
*self = Some(value);
}
fn push_checked(&mut self, value: T) -> Result<(), OutOfSpace> {
match self {
Some(_) => Err(OutOfSpace),
None => {
self.push(value);
Ok(())
},
}
}
}
impl<'a, R, T> Push<T> for &'a mut R
where
R: Push<T>,
{
fn push(&mut self, value: T) {
(**self).push(value)
}
fn push_checked(&mut self, value: T) -> Result<(), OutOfSpace> {
(**self).push_checked(value)
}
}