Skip to content

Instantly share code, notes, and snippets.

Avatar
👀

Nyi Nyi nyinyithann

👀
View GitHub Profile
@nyinyithann
nyinyithann / DataTableToExpandoObjects.cs
Created Nov 22, 2019
DataTable To ExpandoObjects C#
View DataTableToExpandoObjects.cs
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>())
{
View async_download_with_thread_pool.rs
#![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 Mar 11, 2019
Convert Box<Trait> To concrete type with unsafe
View box_t_to_ref_t_with_unsafe.rs
trait Animal {
fn speak(&self);
}
#[derive(Debug)]
struct Dog {
name: String,
age: u8,
}
@nyinyithann
nyinyithann / unsafe_freestanding.rs
Created Feb 13, 2019
A simple freestanding program using libc
View unsafe_freestanding.rs
#![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 Feb 6, 2019
add fold method to Option<T>
View option_ext.rs
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 Feb 8, 2019
composition of functions of Result<T,E>
View semi_monad_function_of_result_type.rs
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 Jan 18, 2019
update a particular slice of vector
View update_slice_of_vector.rs
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 Jan 18, 2019
Print error and its source
View print_low_level_error.rs
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),
View type_name.rs
#![feature(core_intrinsics)]
fn print_type_of<T>(_: &T) {
println!("{}", unsafe { std::intrinsics::type_name::<T>() });
}
@nyinyithann
nyinyithann / counter.rs
Last active Dec 25, 2018
Implement Iterator trait to Counter
View counter.rs
/* Counter example can be seen at https://doc.rust-lang.org/std/iter/index.html#implementing-iterator
I just wanna try out implementing Iterator trait on tuple like struct.
Due to the IntoIterator blanket implementation in standard library - "impl<I: Iterator> IntoIterator for I" ,
all Iterator can be treated like IntoIterator. That's why we can call c.into_iter() in the code.
*/
use std::iter::*;
fn main() {
let mut z = 0u32;
let ref mut c = Counter(&mut z);
You can’t perform that action at this time.