profile
viewpoint
Chris Dickinson chrisdickinson @eaze Portland, OR https://www.neversaw.us 🍔👺

chrisdickinson/beefy 800

local development server that aims to make using browserify fast and fun

chrisdickinson/bops 84

buffer operations

chrisdickinson/browservefy 29

simplehttpserver / webrick replacement that automatically responds to a given entry point path with the results of browserify <that path>

chrisdickinson/aabb-2d 21

2d axis aligned bounding boxes

chrisdickinson/asm-tag 19

compile x64 assembly into a callable function

chrisdickinson/aabb-3d 18

3d axis aligned bounding boxes

chrisdickinson/add-event-listener 17

add event listeners in IE and ... everywhere else

chrisdickinson/a-wild-version-appears 9

sometimes versions happen and you want to alert your users

chrisdickinson/bfy-worker 8

web workers for browserify made fast, fun, and easy

bmeck/StaticAnalysis 6

Static Analysis Spec for JS

push eventchrisdickinson/registry

Chris Dickinson

commit sha 94af2ca91c215657a0cd5ace24eae0adf7498639

fix: it works, again

view details

push time in 14 hours

push eventchrisdickinson/surf

Renée Kooi

commit sha b81ad3dd5d0dfee3844e89fa9b9d1bd74887d377

Update chat link, closes #172

view details

Jacob Rothstein

commit sha 6414bb0c4fc41f8d51fc7cdd33f2d43f240fcdf7

update http-types and http-client

view details

dignifiedquire

commit sha 9f463a3b09296ba230a668018a03d42e3dd8de28

docs: update features list

view details

Yoshua Wuyts

commit sha 42cd13aee1ce83dc15c3ce0dffa622330c412edf

update to http-client v3.0.0

view details

Yoshua Wuyts

commit sha ebc44c4ad4a97a68a61d1dc56129888d51b33485

Merge pull request #178 from jbr/update-http-types update http-types and http-client

view details

Chris Dickinson

commit sha 5cec39dda077f0f68bafae3153c9553e8353cb13

feat: Add Response#header_names() This allows users to enumerate response headers. Fixes #166.

view details

Chris Dickinson

commit sha 1f1ee0fb73940abf9b3c5fc355d9e7605e18b766

fix: remove unnecessary lifetime

view details

Chris Dickinson

commit sha 135f3d073b337bbf16d5701043e80fe7fc780e54

fix: add missing import lost in rebase

view details

push time in 15 hours

push eventchrisdickinson/tide-http-auth

Chris Dickinson

commit sha b71c1af88dc9bde1b3151523203493c36b004d3f

switch to Apache-2.0

view details

push time in 15 hours

push eventchrisdickinson/tide-http-auth

Chris Dickinson

commit sha 6b44a3431066f9bff80b51362e84c37f2bf6ec6d

update metadata

view details

push time in 15 hours

Pull request review commententropic-dev/boltzmann

feat: colorized help and usage

 fn main() -> std::result::Result<(), Box<dyn std::error::Error + 'static>> {     }      let settings = package_json.boltzmann.take().unwrap();-    let updated_settings = settings.merge_flags("the version of boltzmann".to_string(), &flags);+    let updated_settings = settings.merge_flags(option_env!("CARGO_PKG_VERSION").unwrap().to_string(), &flags);

Oh interesting – so option_env! reads a value at compile time and interns it into the binary? TIL!

ceejbot

comment created time in a day

Pull request review commententropic-dev/boltzmann

feat: colorized help and usage

 fn main() -> std::result::Result<(), Box<dyn std::error::Error + 'static>> {         xs     } else {         initialize_package_json(&flags.destination)-            .context("Failed to use npm to initialize the repo.")?;+            .context(format!("Failed to run `npm init -y` in {:?}", flags.destination))?;

We may want to use with_context here. It takes a lambda so we don't allocate a string unless we hit the error case. (It's not going to break the performance bank here, as you know, but it might be worth starting to build callus around.)

ceejbot

comment created time in a day

PR opened entropic-dev/boltzmann

Reviewers
feat: embed templates into bin

This turned out to be pretty straightforward.

Include the templates directory with include_dir. Iterate over the items in the dir using the builtin find and collect them into a list. Hand them to Tera.

Tested by building, removing the templates dir, then running the executable and observing success.

+51 -6

0 comment

3 changed files

pr created time in a day

create barnchentropic-dev/boltzmann

branch : chris/embed-templates

created branch time in a day

delete branch entropic-dev/boltzmann

delete branch : ceej/break-up-files

delete time in a day

create barnchentropic-dev/boltzmann

branch : ceej/break-up-files

created branch time in a day

delete branch entropic-dev/boltzmann

delete branch : ceej/break-up-files

delete time in a day

push evententropic-dev/boltzmann

C J Silverio

commit sha e7775aca6786e1396fa9bd8a20ffb96f5fd1961f

chore: break up main.rs into smaller files I chose to split along these lines: - the machinery of turning flags into settings is now in src/settings.rs - node rendering is now in src/render.rs I didn't move the package.json parsing or git checks, as these seem like major logic that belongs in the main file. ALSO, renamed the cli from `ludwig` to `boltzmann`.

view details

push time in a day

PR merged entropic-dev/boltzmann

chore: break up main.rs into smaller files

I chose to split along these lines:

  • the machinery of turning flags into settings is now in src/settings.rs
  • node rendering is now in src/render.rs

I didn't move the package.json parsing or git checks, as these seem like major logic that belongs in the main file.

ALSO, renamed the cli from ludwig to boltzmann.

+279 -251

0 comment

5 changed files

ceejbot

pr closed time in a day

push evententropic-dev/boltzmann

Chris Dickinson

commit sha f1bfca7ff02118fd0196bc6a5fcf542f88623f78

fix: remove remaining <$$>

view details

push time in 2 days

push evententropic-dev/boltzmann

Chris Dickinson

commit sha 9d54842745a86a5e7f4181e4d60535ad366a2838

Separate input&settings layers. Add conditional rendering. This adds groundwork for dependencies but it's not wired up. Adds a conditional github CI action enabled by the --githubci flag.

view details

push time in 3 days

Pull request review commententropic-dev/boltzmann

feat: more documentation; make the template handler be hello world

 The `boltzmann.decorators.params` function takes an ajv schema and generates a d  ### Tests -Boltzmann uses tap for testing. (We're looking for a replacement.) It provides some convenience wrappers to make testing your route handlers easier. It provides [shot](https://github.com/hapijs/shot) as a way to inject requests into your service. If you're using postgres, it wraps each test in a transaction so you can exercise your db code without changing state in your underlying database. We feel that databases are not behavior we want to replicate in mocks. It's more useful to test use of the db directly.+Boltzmann uses tap for testing. It provides some convenience wrappers to make testing your route handlers easier. It provides [shot](https://github.com/hapijs/shot) as a way to inject requests into your service. If you're using postgres, it wraps each test in a transaction so you can exercise your db code without changing state in your underlying database. We feel that databases are not behavior we want to replicate in mocks. It's more useful to test use of the db directly.

Just noticed: we don't actually expose shot – we wrap it up as assert.request. Probably not necessary to change in this PR, since we'll probably want to write a guide on "how to test a boltzmann app".

ceejbot

comment created time in 3 days

Pull request review commententropic-dev/boltzmann

feat: more documentation; make the template handler be hello world

 export async function greeting(/** @type {Context} */ context) { } ``` -To run: `./boltzmann.js`. And to view the response: `[http](https://httpie.org) GET localhost:5000/hello/world`+To run: `./boltzmann.js`. And to view the response: `curl GET localhost:5000/hello/world`
To run: `./boltzmann.js`. And to view the response: `curl http://localhost:5000/hello/world`
ceejbot

comment created time in 3 days

Pull request review commententropic-dev/boltzmann

feat: more documentation; make the template handler be hello world

 # boltzmann -A catchy slogan here.+Boltzmann is a JS micro framework for JSON api services. It is implemented in a single file that lives alongside your code.

I'd kind of prefer we simplify the first sentence: Boltzmann is a JS framework for writing web servers. (I am reacting against the "micro == good" trend in Node web frameworks, here. May as well be honest – being small isn't a goal of ours, being easy to replace is.)

ceejbot

comment created time in 3 days

Pull request review commententropic-dev/boltzmann

feat: more documentation; make the template handler be hello world

 function throwup(context) {  To control response headers and status, add `Symbol.for('status')` and `Symbol.for('headers')` symbols as attributes to your response object. You can do this in normal responses as well as error responses. We use symbols so we don't collide with any fields you might want to put on your response object yourself. -### Decorators and middleware+A route can also have an optional `.version` field. A version string instructs `find-my-way` to use the accept-version header field to match incoming requests to the version of the route provided. By convention, you must use valid semver in version fields. -Decorators and middleware have the same API. The difference is that middleware are set up for the whole application: they apply to every route. Decorators are applied to only the routes that need them; you decorate routes with functions to do small tasks. Here we borrow some concepts from [aspect-oriented programming](https://en.wikipedia.org/wiki/Aspect-oriented_programming) and Python [decorators](https://en.wikipedia.org/wiki/Aspect-oriented_programming).+Routes have one more meaningful optional field: `decorators`. -A route can have an optional `decorators` field. The decorators field must be an array of functions that wrap the handler function. Boltzmann provides three validator decorators that rely on [the ajv schema validator](https://github.com/epoberezkin/ajv) for you to enforce a schema for your route parameters, query params, and body.  The functions are:+### Decorators and middleware -* `boltzmann.decorators.body`: validate-* `boltzmann.decorators.query`: validate parameters in the query string-* `boltzmann.decorators.params`: validate route parameters+Change route handler behavior by wrapping your handlers in *decorators*. Add behavior to all routes by defining *middleware*. This is an important part of Boltzmann's API and a place where it differs from Express and Connect-middleware style node frameworks. We borrow some concepts from [aspect-oriented programming](https://en.wikipedia.org/wiki/Aspect-oriented_programming) and Python [decorators](https://en.wikipedia.org/wiki/Aspect-oriented_programming), so if you've used frameworks like Django you'll find them familiar. -Here's an example of a route parameter that must be a uuid:+Decorators and middleware have the same API. The difference is that "middlewares" are set up for the whole application: they apply to every route. Decorators are applied to only the routes that need them. Use a decorator when you want to require, for example, administrator-only access to a set of routes, or when you'd like to make sure a root object exists before doing things with it. -```js-identityDetail.route = 'GET /identities/identity/:id'-identityDetail.decorators = [-  boltzmann.decorators.params({-    type: 'object',-    required: ['id'],-    properties: {-      id: { type: 'string', format: 'uuid' }-    }-  })-]-async function identityDetail (/** @type {Context} */ context, params) { }-```+To add decorators to a route, add a `decorators` field. The `decorators` field must be an array of functions that wrap the handler function. -The `boltzmann.decorators.params` function takes an ajv schema and generates a decorator that applies the schema to any route params supplied.+To set up your application with middleware, -A route can also have an optional `.version` field. A version string instructs `find-my-way` to use the accept-version header field to match incoming requests to the version of the route provided. By convention, you must use valid semver in version fields.+Boltzmann looks for middleware exported by the following two places: +- from `middleware.js` in the same directory (good for small services)+- from a `middleware/` directory

We'll load it from middleware/index.js, but not necessarily load all the middleware in the middleware/ directory. I can picture someone tripping over this ("I have all my middleware in files in middleware/, but it's not getting loaded!")

ceejbot

comment created time in 3 days

Pull request review commententropic-dev/boltzmann

feat: more documentation; make the template handler be hello world

 Every route handler receives exactly one parameter: a context object. You should - `redisClient`: a [node-redis](https://github.com/NodeRedis/node-redis) client; present if you have enabled the redis feature - `postgresClient`: a [node-postgres](https://github.com/brianc/node-postgres) client; present if you have enabled the postgresql feature +### Route handlers++Route handlers are functions with a `route` field. The route field is a [find-my-way](https://github.com/delvedor/find-my-way) route with a little sugar. The handler is a function that takes a context object and returns a plain old Javascript object *or* throws an error. +Boltzmann looks for handlers exported by the following two places: -### Route handlers+- from `handlers.js` in the same directory (good for small services)+- from a `handlers/` directory++The scaffolding tool gives you a working `handlers.js` file.++The route field should look like this: `VERB /path/with/:params`. The first segment of the string must be an http verb that `find-my-way` can pass to its `route.on()`. The second segment must be a path format that `find-my-way` understands.

We should weasel this a bit at the end with "If you need to accept 2 or more verbs, you can configure the verbs and the path separately. Here's a link to a guide."

ceejbot

comment created time in 3 days

Pull request review commententropic-dev/boltzmann

feat: more documentation; make the template handler be hello world

 # boltzmann -A catchy slogan here.+Boltzmann is a JS micro framework for JSON api services. It is implemented in a single file that lives alongside your code. -Boltzmann doesn't try to be fast. We have no idea how fast or how slow Boltzmann is, in fact. (If we needed to be fast, we'd use Rust.) We are focused on *developer experience*. Things that we find we need to do every time we write a web service, we want our framework to do out of the box. We also do not want to invent more than we need to. Boltzmann is a thin wrapper around well-tested http primitives, such as [jshttp project](https://github.com/brianc/node-postgres) and [find-my-way](https://github.com/brianc/node-postgres). Our goal is that it should be easy to _throw Boltzmann away_ if you move on from it.+Boltzmann doesn't try to be fast. We have no idea how fast or how slow Boltzmann is, in fact. (If we needed to be fast, we'd use Rust.) We are focused on *developer experience*. Things that we find we need to do every time we write a service, we want our framework to do out of the box. We also do not want to invent more than we need to, so Boltzmann is a thin wrapper around well-tested node packages like [jshttp](https://github.com/jshttp) and [find-my-way](https://github.com/delvedor/find-my-way).

We're starting out a bit defensive here. I suggest bringing "Boltzmann is focused on delivering a great developer experience." up into the previous para, and dropping the rest in favor of the design goals below. We may add "Use only minimal, well-vetted dependencies" to the design goals as well.

ceejbot

comment created time in 3 days

Pull request review commententropic-dev/boltzmann

feat: more documentation; make the template handler be hello world

 test('sessionCreate: can create a session', _(async assert => { })) ``` -## Optional built-in features--### Redis--### Postgres+TODO: example of setting up middleware for tests -### Honeycomb  ## Dependencies -- [accepts]()-- [ajv]()-- [are-we-dev]()-- [bole]()-- [culture-ships]()-- [dotenv]()-- [find-my-way]()-- [handy-redis]()-- [honeycomb-beeline]()-- [on-headers]()-- [pg]()-- [redis]()+- [accepts](https://github.com/jshttp/accepts)+- [ajv](https://github.com/epoberezkin/ajv)+- [are-we-dev](https://github.com/chrisdickinson/are-we-dev)+- [bole](https://github.com/rvagg/bole)+- [culture-ships](https://github.com/ceejbot/culture-ships)+- [dotenv](https://github.com/motdotla/dotenv)+- [find-my-way](https://github.com/delvedor/find-my-way)+- [handy-redis](https://github.com/mmkal/handy-redis)+- [honeycomb-beeline](https://github.com/honeycombio/beeline-nodejs)+- [on-headers](https://github.com/jshttp/on-headers)+- [pg](https://github.com/brianc/node-postgres)+- [redis](https://github.com/NodeRedis/node-redis)

An honest question: why display the list of dependencies here?

ceejbot

comment created time in 3 days

Pull request review commententropic-dev/boltzmann

feat: more documentation; make the template handler be hello world

 modules.exports = [ ] ``` -See `examples/middleware/` for some meatier examples.+See `examples/middleware/` for some meatier examples. Pro tip: debugging is easier if you name each of these layers instead of using anonymous functions.++### Built-in middleware -### Write a test+TOOD

I really, really like this typo :smile:

ceejbot

comment created time in 3 days

Pull request review commententropic-dev/boltzmann

feat: more documentation; make the template handler be hello world

 export async function greeting(/** @type {Context} */ context) { } ``` -To run: `./boltzmann.js`. And to view the response: `http GET localhost:5000/hello/world`+To run: `./boltzmann.js`. And to view the response: `[http](https://httpie.org) GET localhost:5000/hello/world`  ## Creating a boltzmann app -This repo provides a command-line tool, `ludwig`, that generates a single javascript file with all of Boltzmann's implementation, and some scaffolding for a full Boltzmann app if it's not already present. The tool enables or disables specific Boltzmann features. The tool is safe to re-run, *provided* you are running it in a versioned git directory.+This repo includes a command-line tool, `ludwig`, that generates a single javascript file with all of Boltzmann's implementation, and some scaffolding for a full Boltzmann app if it's not already present. The tool enables or disables specific Boltzmann features. The tool is safe to re-run, *provided* you are running it in a versioned git directory.  To scaffold with redis and honeycomb:  ```sh-ludwig redis honeycomb+ludwig --redis=on --honeycomb=on ``` -The scaffold currently assumes you're using node as your runtime and NPM as your package manager. It installs its dependencies for you, at the versions it needs. From this moment on, both boltzmann and its dependencies are under your management. Boltzmann is in your app repo as a source file, not as a dependency you install. You are free to make changes to the Boltzmann file, but be aware the scaffolding tool won't respect your changes if you run it again to update.+The scaffold currently assumes you're using node as your runtime and NPM as your package manager. It installs its dependencies for you, at the versions it needs. From this moment on, both boltzmann and its dependencies are under your management. Boltzmann is in your app repo as a source file, not as a dependency you install. You are free to make changes to the Boltzmann file, but be aware the scaffolding tool won't respect your changes if you run it again to update. You are also free to update or pin Boltzmann's dependencies.  If you need to change Boltzmann's core behavior, you can either re-run the command-line tool to change features *or* write your own middleware. You'll be writing your own middleware for any reasonably complex project anyway!  Features: -- postgres-- redis-- honeycomb-- ping-- status+- ping: respond to `GET /ping` with a short text message; on by default+- status: respond to `GET /status` with a JSON object with process information; off by default

(Do we plan on moving from /monitor/ping to /ping?)

ceejbot

comment created time in 3 days

Pull request review commententropic-dev/boltzmann

feat: more documentation; make the template handler be hello world

 modules.exports = [ ] ``` -See `examples/middleware/` for some meatier examples.+See `examples/middleware/` for some meatier examples. Pro tip: debugging is easier if you name each of these layers instead of using anonymous functions.

TODO, someday: link to naming conventions for middleware. ("attachX", "verb", etc.)

ceejbot

comment created time in 3 days

Pull request review commententropic-dev/boltzmann

feat: more documentation; make the template handler be hello world

 export async function greeting(/** @type {Context} */ context) { } ``` -To run: `./boltzmann.js`. And to view the response: `http GET localhost:5000/hello/world`+To run: `./boltzmann.js`. And to view the response: `[http](https://httpie.org) GET localhost:5000/hello/world`  ## Creating a boltzmann app -This repo provides a command-line tool, `ludwig`, that generates a single javascript file with all of Boltzmann's implementation, and some scaffolding for a full Boltzmann app if it's not already present. The tool enables or disables specific Boltzmann features. The tool is safe to re-run, *provided* you are running it in a versioned git directory.+This repo includes a command-line tool, `ludwig`, that generates a single javascript file with all of Boltzmann's implementation, and some scaffolding for a full Boltzmann app if it's not already present. The tool enables or disables specific Boltzmann features. The tool is safe to re-run, *provided* you are running it in a versioned git directory.

(tacit in this: while I like the ludwig name, I think we might just align the cli tool name to reduce confusion. Also, we should make all the builds available via NPM to make it easier for folks to install – i.e., we shouldn't require users to know their specific architecture + platform.)

ceejbot

comment created time in 3 days

Pull request review commententropic-dev/boltzmann

feat: more documentation; make the template handler be hello world

 export async function greeting(/** @type {Context} */ context) { } ``` -To run: `./boltzmann.js`. And to view the response: `http GET localhost:5000/hello/world`+To run: `./boltzmann.js`. And to view the response: `[http](https://httpie.org) GET localhost:5000/hello/world`

We should tell people to use curl here, imo. (i.e., beginners aren't going to know that httpie is an optional step. Let's get people to the response first, then make tooling recommendations.)

ceejbot

comment created time in 3 days

Pull request review commententropic-dev/boltzmann

feat: more documentation; make the template handler be hello world

 Every route handler receives exactly one parameter: a context object. You should - `redisClient`: a [node-redis](https://github.com/NodeRedis/node-redis) client; present if you have enabled the redis feature - `postgresClient`: a [node-postgres](https://github.com/brianc/node-postgres) client; present if you have enabled the postgresql feature +### Route handlers++Route handlers are functions with a `route` field. The route field is a [find-my-way](https://github.com/delvedor/find-my-way) route with a little sugar. The handler is a function that takes a context object and returns a plain old Javascript object *or* throws an error. +Boltzmann looks for handlers exported by the following two places: -### Route handlers+- from `handlers.js` in the same directory (good for small services)+- from a `handlers/` directory++The scaffolding tool gives you a working `handlers.js` file.++The route field should look like this: `VERB /path/with/:params`. The first segment of the string must be an http verb that `find-my-way` can pass to its `route.on()`. The second segment must be a path format that `find-my-way` understands. -Route handlers are functions with a `route` field. The route field is a [find-my-way]() route with a little sugar. The handler is a function that takes a context object and returns a plain old Javascript object.+To respond to a request with data, return the data from your handler function. Boltmann will correctly set content type headers for several common response types, like `text/plain` and `application/json`.

(Typo: Boltmann)

It might be worth having a document listing return values and how they're mapped to http semantics.

ceejbot

comment created time in 3 days

Pull request review commententropic-dev/boltzmann

feat: more documentation; make the template handler be hello world

 export async function greeting(/** @type {Context} */ context) { } ``` -To run: `./boltzmann.js`. And to view the response: `http GET localhost:5000/hello/world`+To run: `./boltzmann.js`. And to view the response: `[http](https://httpie.org) GET localhost:5000/hello/world`  ## Creating a boltzmann app -This repo provides a command-line tool, `ludwig`, that generates a single javascript file with all of Boltzmann's implementation, and some scaffolding for a full Boltzmann app if it's not already present. The tool enables or disables specific Boltzmann features. The tool is safe to re-run, *provided* you are running it in a versioned git directory.+This repo includes a command-line tool, `ludwig`, that generates a single javascript file with all of Boltzmann's implementation, and some scaffolding for a full Boltzmann app if it's not already present. The tool enables or disables specific Boltzmann features. The tool is safe to re-run, *provided* you are running it in a versioned git directory.  To scaffold with redis and honeycomb:  ```sh-ludwig redis honeycomb+ludwig --redis=on --honeycomb=on ``` -The scaffold currently assumes you're using node as your runtime and NPM as your package manager. It installs its dependencies for you, at the versions it needs. From this moment on, both boltzmann and its dependencies are under your management. Boltzmann is in your app repo as a source file, not as a dependency you install. You are free to make changes to the Boltzmann file, but be aware the scaffolding tool won't respect your changes if you run it again to update.+The scaffold currently assumes you're using node as your runtime and NPM as your package manager. It installs its dependencies for you, at the versions it needs. From this moment on, both boltzmann and its dependencies are under your management. Boltzmann is in your app repo as a source file, not as a dependency you install. You are free to make changes to the Boltzmann file, but be aware the scaffolding tool won't respect your changes if you run it again to update. You are also free to update or pin Boltzmann's dependencies.  If you need to change Boltzmann's core behavior, you can either re-run the command-line tool to change features *or* write your own middleware. You'll be writing your own middleware for any reasonably complex project anyway!  Features:

Should we make this a heading so it's linkable?

ceejbot

comment created time in 3 days

Pull request review commententropic-dev/boltzmann

feat: more documentation; make the template handler be hello world

 function throwup(context) {  To control response headers and status, add `Symbol.for('status')` and `Symbol.for('headers')` symbols as attributes to your response object. You can do this in normal responses as well as error responses. We use symbols so we don't collide with any fields you might want to put on your response object yourself. -### Decorators and middleware+A route can also have an optional `.version` field. A version string instructs `find-my-way` to use the accept-version header field to match incoming requests to the version of the route provided. By convention, you must use valid semver in version fields. -Decorators and middleware have the same API. The difference is that middleware are set up for the whole application: they apply to every route. Decorators are applied to only the routes that need them; you decorate routes with functions to do small tasks. Here we borrow some concepts from [aspect-oriented programming](https://en.wikipedia.org/wiki/Aspect-oriented_programming) and Python [decorators](https://en.wikipedia.org/wiki/Aspect-oriented_programming).+Routes have one more meaningful optional field: `decorators`.

Here's a head-scratcher for ya: should we just call this "route specific middleware" instead of "decorators" & attach as route.middleware?

I worry about the decorators name because there's an ES20XX feature landing called "decorators" which is... not the same thing. (Tide got me thinking about this because they call decorators middleware.)

ceejbot

comment created time in 3 days

Pull request review commententropic-dev/boltzmann

feat: more documentation; make the template handler be hello world

 export async function greeting(/** @type {Context} */ context) { } ``` -To run: `./boltzmann.js`. And to view the response: `http GET localhost:5000/hello/world`+To run: `./boltzmann.js`. And to view the response: `[http](https://httpie.org) GET localhost:5000/hello/world`  ## Creating a boltzmann app -This repo provides a command-line tool, `ludwig`, that generates a single javascript file with all of Boltzmann's implementation, and some scaffolding for a full Boltzmann app if it's not already present. The tool enables or disables specific Boltzmann features. The tool is safe to re-run, *provided* you are running it in a versioned git directory.+This repo includes a command-line tool, `ludwig`, that generates a single javascript file with all of Boltzmann's implementation, and some scaffolding for a full Boltzmann app if it's not already present. The tool enables or disables specific Boltzmann features. The tool is safe to re-run, *provided* you are running it in a versioned git directory.

Rough suggestion here, we might orient this more towards "you want to try this tool. here's how. followed by what to expect."

To get started with Boltzmann, download the `boltzmann` command-line tool.
You can get it from [the releases page][] or run it via `npx boltzmann-cli`. The
tool is responsible for initializing a new Boltzmann project as well as keeping it
up to date. You enable or disable specific Boltzmann features using the tool.

To scaffold with redis and honeycomb:
ceejbot

comment created time in 3 days

Pull request review commententropic-dev/boltzmann

feat: more documentation; make the template handler be hello world

 modules.exports = [ ] ``` -See `examples/middleware/` for some meatier examples.+See `examples/middleware/` for some meatier examples. Pro tip: debugging is easier if you name each of these layers instead of using anonymous functions.++### Built-in middleware -### Write a test+TOOD -- hygienic tests-- built on top of tap (we'd like to replace this)-- boltzmann decorates the test object-- `t.request()` lets you make a request against your service-- tests run in a transaction so they can't interfere with state+### Built-in decorators++Boltzmann provides three validator decorators that rely on [the ajv schema validator](https://github.com/epoberezkin/ajv) for you to enforce a schema for your route parameters, query params, and body.  The functions are:++- `boltzmann.decorators.body`: validate the structure of an incoming body+- `boltzmann.decorators.query`: validate parameters in the query string+- `boltzmann.decorators.params`: validate route parameters++Here's an example of a route parameter that must be a uuid:++```js+identityDetail.route = 'GET /identities/identity/:id'+identityDetail.decorators = [+  boltzmann.decorators.params({+    type: 'object',+    required: ['id'],+    properties: {+      id: { type: 'string', format: 'uuid' }+    }+  })+]+async function identityDetail (/** @type {Context} */ context) { }+```++The `boltzmann.decorators.params` function takes an ajv schema and generates a decorator that applies the schema to any route params supplied.++### Tests++Boltzmann uses tap for testing. (We're looking for a replacement.) It provides some convenience wrappers to make testing your route handlers easier. It provides [shot](https://github.com/hapijs/shot) as a way to inject requests into your service. If you're using postgres, it wraps each test in a transaction so you can exercise your db code without changing state in your underlying database. We feel that databases are not behavior we want to replicate in mocks. It's more useful to test use of the db directly.

I request that we omit (We're looking for a replacement.) because it's going to invite folks PRing different test frameworks in, which will cause me some amount of stress. 😅

ceejbot

comment created time in 3 days

create barnchentropic-dev/boltzmann

branch : chris/subcommands-and-json-loading

created branch time in 4 days

Pull request review commententropic-dev/boltzmann

feat: implement check_git_status()

 fn load_project_settings(dir: &PathBuf) -> Result<()> {     Ok(()) } +// Return ok if we can proceed, and an error saying why if we can't. fn check_git_status(flags: &Flags) -> Result<()> {-    Ok(())+    if flags.force {+        return Ok(()); // YOLO!+    }++    if !std::path::Path::new(&flags.destination).exists() {+        return Ok(());+    }++    let exit_status = Exec::cmd("git")+        .arg("diff")+        .arg("--quiet")+        .cwd(&flags.destination)+        .stderr(NullFile)+        .join()?;++    match exit_status {+        ExitStatus::Exited(129) => Ok(()), // target is not a git dir; this is fine+        ExitStatus::Exited(0) => Ok(()),   // target is clean+        ExitStatus::Exited(1) => {+          Err(anyhow!("git working directory is dirty; pass --force if you want to run anyway"))

TIL – I had been using anyhow::bail! for this!

ceejbot

comment created time in 4 days

Pull request review commententropic-dev/boltzmann

feat: implement check_git_status()

 fn load_project_settings(dir: &PathBuf) -> Result<()> {     Ok(()) } +// Return ok if we can proceed, and an error saying why if we can't. fn check_git_status(flags: &Flags) -> Result<()> {-    Ok(())+    if flags.force {+        return Ok(()); // YOLO!+    }++    if !std::path::Path::new(&flags.destination).exists() {+        return Ok(());+    }++    let exit_status = Exec::cmd("git")+        .arg("diff")+        .arg("--quiet")+        .cwd(&flags.destination)+        .stderr(NullFile)+        .join()?;

Well, that's straightforward!

ceejbot

comment created time in 4 days

Pull request review commententropic-dev/boltzmann

feat: we can now render a fresh project

 function test ({   after = require('tap').teardown }) {   const shot = require('@hapi/shot')-  // <% if postgres %>+  // {% if postgres == "on" %}   const database = process.env.TEST_DB_NAME || '<$ service $>_test'   const postgresClient = new pg.Client({     connectionString: process.env.PGURL || `postgres://localhost:5432/${database}`   })   postgresClient.connect()-  // <% endif %>+  // {% endif %} -  // <% if redis %>+  // {% if redis == "on" %}   const redisClient = redis.createHandyClient(`redis://localhost:6379/7`)-  // <% endif %>+  // {% endif %} -  // <% if postgres or redis %>+  // {% if postgres or redis %}   after(() => {-    // <% if postgres %>+    // {% if postgres == "on" %}     postgresClient.end()-    // <% endif %>-    // <% if redis %>+    // {% endif %}+    // {% if redis == "on" %}     redisClient.end()-    // <% endif %>+    // {% endif %}   })-  // <% endif %>+  // {% endif %}

It just now clicked for me that we're using {}, and I'm happy we're back to it (since we're no longer using helm!)

ceejbot

comment created time in 4 days

Pull request review commententropic-dev/boltzmann

feat: we can now render a fresh project

-/* <% if not test %>eslint-disable<% endif %> */-/* <% if not test %>istanbul ignore file<% endif %> */+#!/usr/bin/env node+{% if selftest == false %}/* eslint-disable */{% endif %}+{% if selftest == false %}/* istanbul ignore file */{% endif %}+ 'use strict' -// <% if honeycomb %>+// {% if honeycomb == "on" %}

(I'm starting to think we should process the flags a bit more before sending them in as context.)

ceejbot

comment created time in 4 days

Pull request review commententropic-dev/boltzmann

feat: we can now render a fresh project

 fn render_dir(spec: DirSpec, cwd: &mut PathBuf, mode: u32, parents: &mut Vec<Str             fd.write_all(data.as_bytes())                 .with_context(|| format!("failed to write {:?}", cwd))?;         }-+        cwd.pop();+        parents.pop();

A-ha, yes, those would be important, wouldn't they?

ceejbot

comment created time in 4 days

Pull request review commententropic-dev/boltzmann

feat: we can now render a fresh project

 Dir(DirSpec(   children: [     ("example.txt", Template(TemplateSpec(       template_name: "example.tmpl"-    )), 0o644)+    )), 0o644),+    ("boltzmann.js", Template(TemplateSpec(+      template_name: "boltzmann.js.tmpl"+    )), 0o755),+    ("handlers.js", Template(TemplateSpec(+      template_name: "handlers.js.tmpl"+    )), 0o644),+    ("middleware.js", Template(TemplateSpec(+      template_name: "middleware.js.tmpl"+    )), 0o644),

I really like the Ron format.

ceejbot

comment created time in 4 days

push evententropic-dev/boltzmann

Chris Dickinson

commit sha 7f4741a10f1c6d986ecd8d07d12023ec6ba4a321

Initial code spike. - Use Ron to define the directory + template structure. Ron knows. - Use Tera to render templates. Commiting this as a checkpoint to see if it runs at all; next steps are to add conditionals to the filenode walk (e.g., "Don't render middleware.js if middleware/index.js exists!")

view details

Chris Dickinson

commit sha 5126ce731195fd209c661df9fcd96ae0f20dc407

Add a template to the Ronfile and observe that it renders. This slices out work for the evening.

view details

push time in 4 days

push eventchrisdickinson/tide-http-auth

Chris Dickinson

commit sha d712910ca0cdf78b2bf9ab34b943f5146670d2f5

fix: remove unnecessary header parsing, add more docs

view details

push time in 6 days

create barnchchrisdickinson/tide-http-auth

branch : latest

created branch time in 6 days

created repositorychrisdickinson/tide-http-auth

HTTP auth for tide! Pretty Basic, if you'll Bearer with me

created time in 6 days

push eventchrisdickinson/tide

Yoshua Wuyts

commit sha f0981c2b9c159cc759edc173934ce7542289baf2

Add Server::respond

view details

Yoshua Wuyts

commit sha dc2118cc37ab71b8709fdc568317be029533884a

Allow casting to Response types from Server::respond

view details

Yoshua Wuyts

commit sha 00cb0f37d25dd76ec06e2b0be8ceb4a1e0b92b73

fix doc fmt

view details

Yoshua Wuyts

commit sha ee5f05e35085711a1cef7087031ae52a5fabbdf6

Remove http-service

view details

Yoshua Wuyts

commit sha b45bf6b8d8ce5d18bf16de2148f6469a384f885a

remove http-service for tests

view details

Yoshua Wuyts

commit sha c3ee6afbb2945ba47dbf505d032f14f7d68c815b

use unused port for tests

view details

Yoshua Wuyts

commit sha 49516000cc104916bbfbaa2c6289c2f63e596dac

add @tirr-c as co-author

view details

Jeremiah Senkpiel

commit sha 2f7ae7328d0e20e0c0ab054af9d80936bfcf0f9b

Response: expose `remove_header` From http_types::Response Useful for e.g. compression middleware where content-length is normally stripped.

view details

Yoshua Wuyts

commit sha 990b7a6350291e13411e7792c522fe274dccdd13

Merge pull request #508 from Fishrock123/response-remove-header Response: expose `remove_header`

view details

Yoshua Wuyts

commit sha 9a143b3098c93ecc9f4ecd5d69d57a8a3244ecc6

impl feedback from review

view details

Yoshua Wuyts

commit sha 4a62009127af699b07ed41c733a78b9ccda05862

Merge pull request #503 from http-rs/remove-http-service Remove http service

view details

Yoshua Wuyts

commit sha 9b57306e3c8295af004dae4f8270eee9c7f12396

remove backup files

view details

Yoshua Wuyts

commit sha 03783acecf19517eb361d763d1f61ae17284c0b8

remove duplicate and unused deps

view details

Yoshua Wuyts

commit sha 62dce672080148caf37a6b1773f9a27fa5ba19a2

alphabetize deps

view details

Yoshua Wuyts

commit sha fc3011276e5667033274f73d45a555f39a5c4ebe

fix ci

view details

Yoshua Wuyts

commit sha bc1f174e66d8005c8917784c5386622dd78becda

cargo fmt

view details

Yoshua Wuyts

commit sha 757a159adf36c65f9c9f02fd339ccdb67650c30f

fix tests

view details

Yoshua Wuyts

commit sha 200804b82cc9561a220e663642ab3496b5afeee9

merge fixes

view details

Yoshua Wuyts

commit sha 64e7b2e611b62d30420b7df62c839618e34e95ca

add final missed dep

view details

Yoshua Wuyts

commit sha f3410811beab8a168a584af72ecf674e22c3bbb2

Merge pull request #506 from http-rs/clean-deps tidy up deps

view details

push time in 6 days

push eventchrisdickinson/surf

Chris Dickinson

commit sha e1457bb2b401c31969f78876e114fc3661fe42e0

wow wow wow

view details

push time in 9 days

push eventchrisdickinson/surf

Chris Dickinson

commit sha 6aaad6846d8026c4444f0c40ee5053004e9ef2c2

really very upgrade, such wow

view details

push time in 9 days

push eventchrisdickinson/surf

Chris Dickinson

commit sha 89876766dcc008f699378df31e6ba18377001636

move to git dep

view details

push time in 9 days

create barnchchrisdickinson/http-client

branch : upgrade

created branch time in 9 days

fork chrisdickinson/http-client

Types and traits for http clients

fork in 9 days

create barnchchrisdickinson/surf

branch : upgrade

created branch time in 9 days

push eventchrisdickinson/tide

Chris Dickinson

commit sha 269b0bc7c30b13e622098f758238a71873aa81d3

huh

view details

push time in 15 days

create barnchchrisdickinson/http-service

branch : upgrade-async-std

created branch time in 15 days

push eventchrisdickinson/registry

Chris Dickinson

commit sha a1d940fcd64757000eefe3a769c387793de6a301

remove unused box magic

view details

push time in 16 days

fork chrisdickinson/http-service

Types and traits for http-based services using the latest futures API

https://docs.rs/http-service

fork in 16 days

create barnchchrisdickinson/async-sse

branch : upgrade-async-std

created branch time in 16 days

fork chrisdickinson/async-sse

Async Server Sent Events parser and encoder

https://docs.rs/async-sse

fork in 16 days

push eventchrisdickinson/http-types

Chris Dickinson

commit sha 31905b66498ed56fcab0a7ffb644fca8bec05ded

fix: pin to a real version

view details

push time in 16 days

push eventchrisdickinson/http-types

Chris Dickinson

commit sha 198afaef327dce75319343595b14c509c038bd5b

fix: maybe this will work

view details

push time in 16 days

create barnchchrisdickinson/http-types

branch : upgrade-async-std

created branch time in 16 days

push eventchrisdickinson/tide

Chris Dickinson

commit sha b2cfa822b1148d5b0a5daa4390d8837aa254605c

fix: cargo toml error

view details

push time in 16 days

created tagchrisdickinson/tide

tagv0.9.0-beta

Empowering everyone to build HTTP Services

created time in 16 days

create barnchchrisdickinson/tide

branch : upgrade-async-std

created branch time in 16 days

push eventchrisdickinson/tide

Allen

commit sha 7c2046a99bdb0053a5ba4b13770e24421fea7889

add test that checks for empty body on HEAD req (#179) * add test that checks for empty body on HEAD req * update test currently not working since http-service-mock doesn't exhibit correct behavior yet

view details

Nemo157

commit sha 250482859623118cd7e5281146596247340406cd

Add middleware for catching panics (#265)

view details

nasa

commit sha 1fb4ab3c4b19416bbcd5b9d0fedb8bc737ccce64

Implemented CORS header handler middleware (#262) * feat: Add cors middleware * test: Add cors test code * feat: export CorsMiddleware * feat: Add cors example * $cargo fmt * doc: move example/cors.rs * doc: Add README * doc: Add doc comment * fix example doc comment * fix: Changed type to option * feat: Add credentials header at preflight request * fix: Attach an expose header when requesting preflight * $cargo fmt * fix: remove debug pring * refactor: move build preflight response * fix: Remove echo_back option * fix: fix type OPTION -> OPTIONS * refactor: tide-cors to optional dependence * $cargo fmt * refactor: imple arg to generic argument * fix typo * refactor: using 'match'

view details

Miles Granger

commit sha 4486ba04e9d7fcebe7419a26a3b53c14842a2613

Add templating example with tera (#267)

view details

Allen

commit sha a80315169900743932c21a30c0545442128726db

Update lib.rs reduce redundant compression subcrate docs

view details

Allen

commit sha 994ee1c1bb344e819444ff73791e651266d6952e

reduce redundancy in docs and make consistent (#272) also adds some extra example commands in tide-compression README

view details

real

commit sha ae8926557439e1fc95863ee2fcb21052a32b3a46

Workaround for issue #278: works around Rust internal compiler error.

view details

real

commit sha f0d667dde5bbe48e0f1930d1499382c284b2fcc5

Added a comment explaining the workaround for solving issue 278.

view details

real

commit sha 1505f91871febfa7ffd469462e107968862d7fab

Bumped rust version in .travis.yml to nightly-2019-06-02.

view details

real

commit sha 4bc805bc559f17200e2e23e02c9f6b62895468ee

cargo fmt

view details

Wonwoo Choi

commit sha e4fcb6c57d1d43dfa49136604c10925c671a5749

Merge pull request #279 from realcr/master Workaround for issue #278: works around Rust internal compiler error.

view details

Prasanna Loganathar

commit sha 8f80e0c784867fec1eb5f8f86ce465430b09e2df

Core isolation - part 4 (#258) * extract router; minimalize tide_core * cargo fmt * minor fixes * refactor error mod; Next constructor * cargo fmt * cleanup error type * fix clippy warnings * move router back in; remove err_fmt * fix cors example * move cors example * clippy fixes * basic documentation; more clippy fixes * router: refactor `Selection` * fix cors example * revert cors to default * Cargo.toml: add empty line before EOF

view details

Nemo157

commit sha 2e063ae9f89ce90a1b629eb3475f4b82c7d94190

Add example running on top of runtime (#283)

view details

Nemo157

commit sha a74cc28223b5be4bdbeb943f05821cc07432cd73

Disable default-features everywhere (#282)

view details

Nemo157

commit sha d17b4f022b2dfb922ba2742c6e64696ecd45f6d8

Update for futures alpha.17 (#286)

view details

Wim Looman

commit sha 25de413863e270ae47aed6dc09e2f634923071c2

Rewrite tide-slog to setup a per-request logger instance and support slog-scope

view details

Santiago Pastorino

commit sha 36c15fd4ca67fcb269e7bc87d2ceb6eeb8826483

Add async_closure feature gate where needed (#288)

view details

Taiki Endo

commit sha e63086ab363b86931b91f674bbd2e18faf711b1d

Remove usage of async_closure

view details

Allen

commit sha ff9731c7cd786e0657598234a41a322b32305bf7

Remove usage of async_closure (#289) Remove usage of async_closure

view details

Ryan Leckey

commit sha 3eb630f52b6066944fbef3e088715d277cb3af97

Set StatusCode for an empty response from `()` to `204`

view details

push time in 16 days

create barnchchrisdickinson/registry

branch : smol-s3

created branch time in 16 days

push eventchrisdickinson/registry

Chris Dickinson

commit sha a0447e0c00a9dce0680e2f9f8ff05498e9cea7ce

feat: converge on the final form of auth

view details

push time in 20 days

push eventchrisdickinson/registry

Chris Dickinson

commit sha 2dd2e63db445d71980e8bbe8f9f17129056fb011

feat: make the authn storage define the user type

view details

push time in 20 days

push eventchrisdickinson/registry

Chris Dickinson

commit sha 9d55c86ad81e2a4afe5b44fb191870ee4d49d32a

fix: split up the authn code

view details

push time in 20 days

push eventchrisdickinson/registry

Chris Dickinson

commit sha 00cf8522160b6507b02761c86b11650035094407

no need to unbox now!

view details

push time in 21 days

push eventchrisdickinson/registry

Chris Dickinson

commit sha 005a4dece9bc1c206f91a7089fb40c00a853aa92

checkpoint

view details

Chris Dickinson

commit sha 9c87f3673c7f18696fcd4f930c0b5e25a9158512

fix: it works! but should it?

view details

push time in 21 days

push eventchrisdickinson/registry

Chris Dickinson

commit sha 9ec496e56d142336f54b80094cb8a717a7b50c4b

feat: add cacache store

view details

Chris Dickinson

commit sha 078648373437855105df5bd9c30bcb0748790a39

fix: tarballs should not hang on 404 either

view details

push time in 23 days

push eventchrisdickinson/registry

Chris Dickinson

commit sha afd394d0348293768b6b03967878f04fde84da47

fix: tarballs work now too!

view details

push time in 24 days

push eventchrisdickinson/registry

Chris Dickinson

commit sha fa215013694e1cbe0ed721f1d72e70baa7ab115a

back to unsafe impl Sync, I suppose

view details

Chris Dickinson

commit sha 09dcfe8b078deb0a1a8056fe629df382bd3ab51a

fix: rename readthrough store to remote store

view details

Chris Dickinson

commit sha f81024dbc69e03edab083dfdac11960de8c0d50a

feat: add ReadThrough

view details

push time in 24 days

push eventchrisdickinson/surf

Chris Dickinson

commit sha b493b2a3704bf8a000141df9eae5e0798b4b8006

fix: remove unnecessary lifetime

view details

push time in 24 days

push eventchrisdickinson/registry

Chris Dickinson

commit sha f945348a567c62db1e34cd0208dece3ca194e206

fix: fix segfault by not using curl (maybe?)

view details

push time in 25 days

push eventchrisdickinson/registry

Chris Dickinson

commit sha 84a6c7c996e0ffb184cc7d93ae34e2f3c717dc76

fix: now less unsafe, use a mutex

view details

push time in 25 days

push eventchrisdickinson/registry

Chris Dickinson

commit sha 17d6a176b6f5652e7df0a5b4a5bd98a999aae2a8

feat: add chained + guard readable stores

view details

Chris Dickinson

commit sha fb8b8c09b19d086cfa7b909f557b1d1ef295df15

feat: impl guardstore

view details

Chris Dickinson

commit sha efa572c265ef1de0d78c0a18d254a9a47649cf34

wip! waugh

view details

Chris Dickinson

commit sha 7766179dee22b8013e6e86a425ef325e5e646b3e

fix: cannot WAIT for this to blow up in my face

view details

push time in a month

issue commenthttp-rs/http-types

c

(Sorry for the email, firefox locked up while I was searching for "sync" in the open issue list 😓)

chrisdickinson

comment created time in a month

issue closedhttp-rs/http-types

c

closed time in a month

chrisdickinson

issue openedhttp-rs/http-types

c

created time in a month

push eventchrisdickinson/surf

Chris Dickinson

commit sha 9eb2da597b2d37e1def5eb1c7f31589ca3d49811

fix: fix cargo fmt

view details

push time in a month

PR opened http-rs/surf

feat: Add Response#header_names()

This allows users to enumerate response headers – we're just passing the underlying header_names method through.

Fixes #166.

+17 -1

0 comment

1 changed file

pr created time in a month

create barnchchrisdickinson/surf

branch : header-names

created branch time in a month

push eventchrisdickinson/registry

Jacob Rothstein

commit sha b6bb135b310c01f27d8927c1c8607f417409fb32

buf was zero-length 🤦‍♂️

view details

push time in a month

push eventchrisdickinson/registry

Chris Dickinson

commit sha 6d2f5849e95edfc754f8b3eeef781cee463bfe83

fix: clippy suggests is_empty()

view details

push time in a month

PR merged chrisdickinson/registry

async-std reader for an rusoto bytestream

not quite sure how to test if this works, but it compiles. pretty much a direct rip of https://github.com/rusoto/rusoto/blob/master/rusoto/signature/src/stream.rs#L86-L108 for async_std::io::Read (but without pin_project)

+75 -60

0 comment

1 changed file

jbr

pr closed time in a month

push eventchrisdickinson/registry

Jacob Rothstein

commit sha 579d796730f08dc819988441524ed36e0921f102

async-std reader for an rusoto bytestream

view details

Jacob Rothstein

commit sha 9c47b4e340df41fbd73c5eedbec924a9a66bb89a

maybe stream responses too?

view details

Chris Dickinson

commit sha eed537b65d54833648e2d4658ca008a5762dfbce

feat: implement asyncbufread

view details

push time in a month

push eventchrisdickinson/registry

Chris Dickinson

commit sha 856a13162f46407878597e1b5b8a151fe03392f3

update deps

view details

Chris Dickinson

commit sha fc63b6ad2b6ffe05c4c9df7ae1c9dc014edc447b

doc: update readme

view details

Chris Dickinson

commit sha bda2f7a0e72193ab255ed75a9e2c2c77a1cb074e

fix: fixup clippy complaints, add lots of TODOs

view details

push time in a month

startedasync-rs/async-std-hyper

started time in a month

push eventchrisdickinson/registry

Chris Dickinson

commit sha 2bdc76e875cae987884e691ee933d054c9aa7209

make scoped tarballs work

view details

push time in a month

push eventchrisdickinson/registry

Chris Dickinson

commit sha 2fdcc010d24c78d97933d8f0569794b2be90ab22

add basic readme

view details

push time in a month

push eventchrisdickinson/registry

Chris Dickinson

commit sha 9875b5fc215283f18e9595545b1b6e8405f3789f

cache tarballs in redis, why not

view details

push time in a month

push eventchrisdickinson/registry

Chris Dickinson

commit sha b3e1ee5bb08a5bc2d7c95d664adbb59822521147

split the reader types for readable store

view details

push time in a month

push eventchrisdickinson/registry

Chris Dickinson

commit sha a87f5355406383e793703116a8261346a7d6ed4d

ho ho ho, now I have a redis cache

view details

push time in a month

push eventchrisdickinson/registry

Chris Dickinson

commit sha b1312df5b2038ab924e8bcaa239541b72ae545d5

rewrite tarball urls on the way through, why not

view details

push time in a month

push eventchrisdickinson/registry

Chris Dickinson

commit sha ad9a20063ebf1a04faebe356f6caa28499344b60

implement tarball read

view details

push time in a month

pull request commenthttp-rs/tide

Add Response::from_res

Would it be possible to have a form of this where we could pass a HashMap to override headers on the way through?

Response::from_res(res, hashmap!{
    "ETag" => "a modified etag",
})

(Or possibly a lambda to modify them?)

Response::from_res(res, |headers: &mut Headers| {
  // edit the headers on the way through
})
yoshuawuyts

comment created time in a month

create barnchchrisdickinson/registry

branch : latest

created branch time in a month

more