Skip to content

Instantly share code, notes, and snippets.

View matthewjberger's full-sized avatar

Matthew J. Berger matthewjberger

View GitHub Profile
@matthewjberger
matthewjberger / ringbuffer.rs
Created October 1, 2024 16:45
A no-std fixed capacity ringbuffer in rust
#![no_std]
pub struct CircularBuffer<T, const N: usize> {
buffer: [T; N],
read_idx: usize,
write_idx: usize,
is_full: bool,
}
impl<T: Copy + Default, const N: usize> CircularBuffer<T, N> {
@matthewjberger
matthewjberger / main.rs
Created September 29, 2024 15:11
more ecs ideas in rust
use std::any::Any;
use std::collections::HashMap;
use std::marker::PhantomData;
// Generic handle type
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct Handle<T> {
id: usize,
_phantom: PhantomData<T>,
}
@matthewjberger
matthewjberger / main.rs
Last active September 26, 2024 19:31
Use regex to extract parts of sections of MQTT-like topic strings
use regex::Regex;
use std::collections::HashMap;
#[derive(Debug)]
struct CaptureSpec {
name: String,
position: usize,
regex: Option<String>,
}
use serde_json::Value;
use std::collections::HashMap;
pub fn expand_json_template(template: &str, tokens: &HashMap<String, String>) -> Option<String> {
let substituted = substitute_tokens(template, tokens);
match serde_json::from_str::<Value>(&substituted) {
Ok(value) => serde_json::to_string_pretty(&value).ok(),
Err(e) => {
println!("Error parsing JSON after substitution: {}", e);
None
@matthewjberger
matthewjberger / message.rs
Created September 4, 2024 20:54
Pub/sub broker messaging in-process without an async executor using Send + Sync compatible types
use std::{
collections::HashMap,
sync::{Arc, RwLock, Weak},
};
use std::{
collections::VecDeque,
sync::{RwLockReadGuard, RwLockWriteGuard},
};
use uuid::Uuid;
@matthewjberger
matthewjberger / Cargo.toml
Last active August 28, 2024 15:09
Framegraphs in rust
[package]
name = "framegraph-system"
version = "0.1.0"
edition = "2021"
[dependencies]
petgraph = "0.6.3"
wgpu = "0.15"
pollster = "0.3"
@matthewjberger
matthewjberger / main.rs
Created August 27, 2024 16:52
Rust Job Graphs
// [dependencies]
// futures = "0.3.30"
// petgraph = "0.6.5"
// tokio = { version = "1.39.3", features = ["full"] }
use futures::future::join_all;
use petgraph::graph::{DiGraph, NodeIndex};
use std::{
collections::HashMap,
sync::{Arc, Mutex},
@matthewjberger
matthewjberger / shader.glsl
Created August 24, 2024 19:33
cube shader for shadertoy
#define MAX_STEPS 100
#define MAX_DIST 100.0
#define SURF_DIST 0.001
// Camera variables
vec3 cameraPos;
vec3 cameraTarget;
float cameraZoom = 5.0;
mat3 getCameraRotation(vec2 angle) {
@matthewjberger
matthewjberger / mapping.rs
Created August 21, 2024 03:38
serde_json error impl From<> in rust
impl From<serde_json::Error> for Error {
fn from(value: serde_json::Error) -> Self {
let class = match value.classify() {
serde_json::error::Category::Io => "io",
serde_json::error::Category::Syntax => "syntax",
serde_json::error::Category::Data => "data",
serde_json::error::Category::Eof => "eof",
};
Error::Deser {
@matthewjberger
matthewjberger / Cargo.toml
Created August 19, 2024 10:49
Standalone Winit Wgpu/Triangle
[package]
name = "app"
version = "0.1.0"
edition = "2021"
[lib]
crate-type = ["cdylib", "rlib"]
path = "src/lib.rs"
name = "app_core"