Skip to content

Instantly share code, notes, and snippets.

View elycruz's full-sized avatar

Ely De La Cruz elycruz

View GitHub Profile
@elycruz
elycruz / validation_types.rs
Created June 16, 2024 01:06
Rust validators idea
/**
* Objective: Create constraint validation error reporting types, and/or, structs to
* be used by constraint validation types.
*/
use std::collections::{HashSet, HashMap};
use std::fmt;
use std::fmt::Debug;
use std::fmt::Display;
use std::error::Error;
@elycruz
elycruz / fns_and_closures_in_structs.rs
Created May 25, 2024 22:39
Function and Closure references as values in struct
/// Demonstrates an approach for accepting different types of functions, with different lifetimes
/// as struct values.
type MyFn = dyn Fn();
struct ContainsFns<'a> {
other_fn: &'a MyFn,
fns: Option<Vec<&'a MyFn>>
}
@elycruz
elycruz / dyn_fn_variance_example.rs
Created May 5, 2024 05:36
`dyn Fn(T)` Variance/lifetime Issue
use std::fmt::{Display};
use std::borrow::Cow;
/// Represent some scalar values for test.
///
trait InputValue: Copy + Default + Display + PartialEq + PartialOrd {}
impl InputValue for isize {}
impl InputValue for usize {}
impl InputValue for &str {}
@elycruz
elycruz / wordpress-language-codes.csv
Created March 16, 2024 19:17 — forked from danielbachhuber/wordpress-language-codes.csv
Language / locale codes used in WordPress
language english_name native_name
af Afrikaans Afrikaans
ar Arabic العربية
ary Moroccan Arabic العربية المغربية
as Assamese অসমীয়া
az Azerbaijani Azərbaycan dili
azb South Azerbaijani گؤنئی آذربایجان
bel Belarusian Беларуская мова
bg_BG Bulgarian Български
bn_BD Bengali (Bangladesh) বাংলা
@elycruz
elycruz / modal-dialog-custom-backdrop.js
Last active February 18, 2024 01:58
Modal dialog '::backdrop' replacement.
/**
* Custom modal "backdrop" animation replacement, until `::backdrop` animations are supported.
*/
document.body.innerHTML = `
<style>
body {
display: grid;
place-content: center;
}
@elycruz
elycruz / from_cow_to_cow.rs
Last active April 29, 2023 03:11
Single threaded "filters" pattern
/**
* Single threaded "filters" patterns.
*/
use std::borrow::{Cow, Cow::*};
pub type Filter<'a, T> = &'a dyn Fn(Cow<'a, T>) -> Cow<'a, T>;
fn filter<'a>(filters: &'a [Filter<'a, str>], value: Cow<'a, str>) -> Cow<'a, str> {
filters.iter().rfold(value, |agg, f| f(agg))
}
@elycruz
elycruz / form_controls_example.rs
Last active April 25, 2023 21:48
Example of declaring a vector with a complex data type, with nested smart pointers, and generics.
use core::fmt::Formatter;
/**
* The goal of this example is to show a way to have algebraic types and generics
* represent a collection of structs that can each have their own types and
* additionally be structurally different from each other.
*
* Question: Are there less "typeful"/verbose ways of acheiving the same this?
*/
use core::fmt::{Display, Debug};
use std::borrow::Cow;
@elycruz
elycruz / material-icon-font-as-web-component.js
Created February 2, 2023 07:11
Example showing how to wrap an icon font as a web component (example adapted for browser 'snippets'/console).
// Note: in real world example things would work slightly differntly:
// ----
const matSymStyleSheet = new CSSStyleSheet();
// Load css for custom 'x-icon' element - In realword scenario css can be loaded using import assertions, and/or,
// directly via app facilities (sass, webpack, etc.).
fetch('https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200')
.then(res => res.text())
.then(css => matSymStyleSheet.replace(`
${css.replace('.material-symbols-outlined', ':host .material-symbols-outlined')}
@elycruz
elycruz / dialog-in-right-hand-drawer-layout.js
Created January 30, 2023 13:58
dialog element in 'right-hand' drawer layout
document.body.innerHTML = `
<style>
html, body {
margin: 0;
padding: 0;
font: normal 1rem Arial, Sans-serif;
}
dialog {
margin: 0;
padding: 0;
@elycruz
elycruz / dom-parser-xml-example.js
Created November 26, 2022 22:04
Basic usage of `DOMParser` (for XML)
const {log} = console,
groupContent = '.'.repeat(5).split('').reduce((agg, _, i) => {
return agg + `<item>` +
`<title>Item ${i}</title>` +
`</item>`;
}, ''),
docContent = `<group>${groupContent}</group>`,