Skip to content

Instantly share code, notes, and snippets.

View kriogenia's full-sized avatar

Soto Estévez kriogenia

View GitHub Profile
@kriogenia
kriogenia / main.rs
Last active June 17, 2022 16:44
Dynamic tuple access in Rust
use std::{rc::Rc, cell::RefCell};
macro_rules! nth {
($tuple:expr, $axis:tt) => {
match $axis {
0 => $tuple.0,
1 => $tuple.1,
_ => unreachable!()
}
}
@kriogenia
kriogenia / main.rs
Last active June 17, 2022 16:07
Starting point of Dynamic tuple indices in Rust
use std::{rc::Rc, cell::RefCell};
struct XLimit {
vector: Rc<RefCell<(i32, i32)>>,
limit: i32
}
impl XLimit {
fn limit(&self) {
if (*self.vector).borrow().0 > self.limit {
struct Foo {
bar: i32
}
impl Foo {
fn instead_of_this() -> Foo {
Foo { bar: 0 }
}
fn you_can_use_this() -> Self {
@kriogenia
kriogenia / main.rs
Created June 3, 2022 12:49
enumerate
fn main() {
let vec = vec!["f", "o", "o"];
// instead of this
for i in 0..vec.len() {
println!("The character at {i} is {}", vec[i]);
}
// you can use this
for (i, char) in vec.iter().enumerate() {
println!("The character at {i} is {char}");
}
@kriogenia
kriogenia / main.rs
Created June 3, 2022 12:28
include_str and include_bytes
const TOKEN_AS_STR: &'static str = include_str!("./token.txt");
const TOKEN_AS_BYTES: &[u8] = include_bytes!("./token.txt");
fn main() {
assert_eq!("HelLoWoRLd", TOKEN_AS_STR);
assert_eq!("HelLoWoRLd".as_bytes(), TOKEN_AS_BYTES);
}
@kriogenia
kriogenia / main.rs
Last active June 3, 2022 12:19
Result alias
enum ReadingError {
OutOfBounds,
InvalidBuffer
}
trait InsteadOfThis {
fn next_char() -> Result<u8, ReadingError>;
fn next_line() -> Result<String, ReadingError>;
fn char_at(pos: usize) -> Result<u8, ReadingError>;
}
@kriogenia
kriogenia / main.rs
Last active June 3, 2022 11:43
if let
fn overflow(n: i32, max: i32) -> Option<i32> {
if n > max {
Some(n - max)
} else {
None
}
}
fn main() {
let n = 15;
@kriogenia
kriogenia / main.rs
Created May 18, 2022 15:40
Generify with compiler errors - Adding starting with zero
fn sum<T>(numbers: &[T]) -> T
where
T: Add<Output = T> + Copy + Zero,
{
let mut total: T = T::zero();
for i in numbers.into_iter() {
total = total + *i;
}
total
}
@kriogenia
kriogenia / main.rs
Last active May 18, 2022 16:05
Generify with compiler errors - Bounded function
fn sum<T>(numbers: &[T]) -> T
where
T: Add<Output = T> + Copy,
{
let mut total = numbers[0];
for i in numbers.into_iter().skip(1) {
total = total + *i;
}
total
}
@kriogenia
kriogenia / main.rs
Last active May 18, 2022 15:14
Generify with compiler errors - No bounds function
fn sum<T>(numbers: &[T]) -> T {
let mut total = numbers[0];
for i in numbers.into_iter().skip(1) {
total = total + *i;
}
total
}