Skip to content

Instantly share code, notes, and snippets.

View danielbodart's full-sized avatar

Daniel Worthington-Bodart danielbodart

View GitHub Profile
@danielbodart
danielbodart / filter.rs
Created December 18, 2016 21:17
Rust nom filter macro
#[macro_export]
macro_rules! filter (
($i:expr, $c: expr) => (
{
if $i.is_empty() {
nom::IResult::Incomplete(nom::Needed::Size(1))
} else {
if $c($i[0]) {
nom::IResult::Done(&$i[1..], &$i[0..1])
} else {
pub fn among(characters:&[u8]) -> Box<Fn(u8) -> bool> {
Box::new(move |chr| {
characters.iter().any(chr)
})
}
#[macro_export]
macro_rules! optional (
($i:expr, $submac:ident!( $($args:tt)* )) => (
{
opt!($i, complete!($i, $submac!($i, $($args)*)))
}
);
($i:expr, $f:expr) => (
optional!($i, call!($f));
);
pub fn message_body<'a>(slice: &'a [u8], headers:&Vec<(&str, String)>) -> IResult<&'a [u8], MessageBody<'a>> {
IResult::Done(slice, MessageBody::None)
}
apply!(message_body, &headers)
fn get<'a>(headers: &'a Vec<(&str, String)>, name:&str) -> Option<&'a str> {
headers.into_iter().find(|&&(key,_)| name.eq_ignore_ascii_case(key)).map(|&(_,&value)|value)
} // ^^^^^^ expected struct `std::string::String`, found reference
#[derive(PartialEq, Debug)]
pub enum StartLine<'a> {
RequestLine (RequestLine<'a>),
StatusLine (StatusLine<'a>),
}
impl <'a> fmt::Display for StartLine<'a> {
fn fmt(&self, format: &mut fmt::Formatter) -> fmt::Result {
match self {
StartLine::RequestLine(rl) => rl.fmt(format),
@danielbodart
danielbodart / HtmlHandler.java
Last active January 17, 2017 20:13
Using Lagarto and csselly to do server composition (Support Server side as well as command line - for build time)
package fun;
import com.googlecode.totallylazy.Streams;
import com.googlecode.totallylazy.io.Uri;
import com.googlecode.utterlyidle.HttpHandler;
import com.googlecode.utterlyidle.Request;
import com.googlecode.utterlyidle.Response;
import com.googlecode.utterlyidle.handlers.ClientHttpHandler;
import com.googlecode.utterlyidle.html.RelativeUrlHandler;
import jodd.lagarto.dom.*;
<div class="application root">
<style src="../generated/bundle.css"></style>
<include src="../generated/bundle.svg" selector="svg"></include>
<decorator src="../header/header.html" selector=".header" content=".controls">
<svg class="close-logo">
<use xlink:href="#close-logo"></use>
</svg>
</decorator>
<include src="../popup/popup.html" selector=".popup"></include>
<decorator src="../footer/footer.html" selector=".footer">
@danielbodart
danielbodart / CallbackToAsyncIterator.ts
Created February 24, 2018 12:18
Callback to AsyncIterator in Typescript/Javascript
/*
* Usage:
* const message: IncomingMessage = ...
* const iterator = new AsyncIteratorHandler<string>();
* message.on("data", chunk => {
* iterator.handle({value: chunk.toString(), done: false});
* });
* this.message.on("end", () => {
* iterator.handle({value: null as any, done: true})
* });
@danielbodart
danielbodart / typesafe-mixin.ts
Last active October 12, 2023 06:36
Typesafe mixin using ECMAScript 2015 mixin class and class expressions
interface Constructor<T = object> {
new(...args: any[]): T;
}
interface Disposable {
dispose(): void;
}
function Disposable<T extends Constructor>(Base: T): T & Constructor<Disposable> {
return class extends Base implements Disposable {