Initial commit
This commit is contained in:
commit
3c4aeef1cc
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
/target
|
||||||
7
Cargo.lock
generated
Normal file
7
Cargo.lock
generated
Normal 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
6
Cargo.toml
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
[package]
|
||||||
|
name = "stilts"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
52
src/lib.rs
Normal file
52
src/lib.rs
Normal 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)
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in a new issue