Skip to content

Instantly share code, notes, and snippets.

View nyinyithann's full-sized avatar
🎩

Nyi Nyi nyinyithann

🎩
View GitHub Profile
@nyinyithann
nyinyithann / gadt.res
Created November 26, 2022 19:56
GADT ReScript
%%raw(
"/*
* this js function will work under both [string] and [float]
*/
function add (x,y){
return x + y;
}")
type rec t<_> = | String : t<string> | Float : t<float>
@nyinyithann
nyinyithann / gist:072077a9ab67f62c4df2ae6e2728a74f
Created January 20, 2022 16:14
TailwindColor Hex Value to RGB
const tailwindColors = {
foo: {
50: '#f9fafb',
100: '#f3f4f6',
200: '#e5e7eb',
300: '#d1d5db',
400: '#9ca3af',
500: '#6b7280',
600: '#4b5563',
700: '#374151',
@nyinyithann
nyinyithann / DataTableToExpandoObjects.cs
Created November 22, 2019 02:39
DataTable To ExpandoObjects C#
public static class DataTableExtensions
{
public static IEnumerable<dynamic> ToExpandoObjectList(this DataTable self)
{
var result = new List<dynamic>(self.Rows.Count);
foreach (var row in self.Rows.OfType<DataRow>())
{
var expando = new ExpandoObject() as IDictionary<string, object>;
foreach (var col in row.Table.Columns.OfType<DataColumn>())
{
@nyinyithann
nyinyithann / async_download_with_thread_pool.rs
Created March 11, 2019 07:32
Async Download with ThreadPool
#![feature(result_map_or_else)]
extern crate num_cpus;
extern crate reqwest;
extern crate threadpool;
use std::error::Error;
use std::thread;
use threadpool::ThreadPool;
@nyinyithann
nyinyithann / box_t_to_ref_t_with_unsafe.rs
Last active March 11, 2019 07:18
Convert Box<Trait> To concrete type with unsafe
trait Animal {
fn speak(&self);
}
#[derive(Debug)]
struct Dog {
name: String,
age: u8,
}
@nyinyithann
nyinyithann / unsafe_freestanding.rs
Created February 13, 2019 15:52
A simple freestanding program using libc
#![feature(start)]
#![no_std]
extern crate libc;
use core::panic::PanicInfo;
use libc::{c_char, c_int, c_void, size_t};
extern "C" {
fn malloc(size: size_t) -> *mut c_void;
fn free(p: *mut c_void);
@nyinyithann
nyinyithann / option_ext.rs
Last active February 6, 2019 13:17
add fold method to Option<T>
use std::borrow::BorrowMut;
pub trait OptionExt<T> {
fn fold<S, F>(&self, state: S, folder: F) -> S
where
F: FnOnce(S, &T) -> S;
}
impl<T> OptionExt<T> for Option<T> {
fn fold<S, F>(&self, state: S, folder: F) -> S
@nyinyithann
nyinyithann / semi_monad_function_of_result_type.rs
Last active February 8, 2019 18:45
composition of functions of Result<T,E>
use std::io;
use std::io::prelude::*;
fn main() {
loop {
let r = get_input("Enter the first number: ")
.and_then(|x| get_input("Enter the second number: ")
.and_then(|y| get_input("Enter the third number: ")
.and_then(|z| Ok(x + y + z))));
@nyinyithann
nyinyithann / update_slice_of_vector.rs
Created January 18, 2019 06:58
update a particular slice of vector
let mut v = vec![1, 2, 3, 4, 5];
let r = v
.get_mut(1..=2)
.map(|x| x.iter_mut().for_each(|y| *y *= 10));
if r.is_some() {
println!("Succeed : {:?}", v);
} else {
println!("Not Succeed. Do something here.");
}
@nyinyithann
nyinyithann / print_low_level_error.rs
Created January 18, 2019 03:14
Print error and its source
use std::error::Error;
use std::fs::File;
use std::io;
use std::io::prelude::*;
use std::io::{stderr, Write};
fn main() {
let r = read_file("wrong.test"); // read_file(r"/Users/nyinyithan/Downloads/test.json");
match r {
Ok(txt) => println!("{}", txt),