Skip to content

Instantly share code, notes, and snippets.

Ashley Mannix KodrAus

Block or report user

Report or block KodrAus

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
KodrAus /
Last active Jul 23, 2019
Finding my examples
KodrAus /
Last active Jul 3, 2019
Converting between `tracing` key values and `log` key values
use std::fmt;
use log::kv::{self, Source, value::{self, Fill}};
use tracing::{Value, Field, field::{self, Visit}};
pub struct LogField<'kvs>(&'kvs Field, &'kvs dyn Value);
impl fmt::Debug for LogField<'_> {
KodrAus / Replace Concrete impl with
Created Jan 25, 2019
Using cargo features to replace a set of concrete impls with a blanket one
View Replace Concrete impl with

Using cargo features to replace a set of concrete trait impls with a blanket one

There's subtlety involved in doing this so I've just dumped this out from another document in case I ever need to remember what they were in the future.


The Visit trait can be treated like a lightweight subset of serde::Serialize that can interoperate with serde, without necessarily depending on it. It can't be implemented manually:

/// A type that can be converted into a borrowed value.
union MaybeInitialized<T> {
initialized: T,
uninitialized: (),
KodrAus /
Last active Jun 11, 2018
Properties Macro
This example demonstrates a potential macro for capturing log properties.
The macro uses a syntax that's _similar_ to struct literals. The idea is to support
extensions to the way properties are captured using attributes.
There's a bit of a misalignment between how formatting is communicated in the log
message and the contextual properties, but they are a bit different. Args are slurped
up into the message using the formatting API whereas properties are exposed as data.
View NonRootScopeLifetime.cs
An Autofac lifetime that ensures dependencies are only resolved from scoped containers.
This acts like a safety-net to prevent captive dependencies:
// Register some short-lived dependency using the `NonRootScopeLifetime`
var registration = builder.Register(c => c.Resolve<IStore>().BeginSession()).As<ISession>();
registration.RegistrationData.Lifetime = new NonRootScopeLifetime();

Dependable Dependencies

A dependable API, docs, examples and maintainership supported by tools and resources.

In this post I'd like to explore the quality libraries aspect of the [Rust 2018 roadmap RFC]. I'll lay out the framework that underpins my perspective on open source development as a starting point for conversation.

Quality means dependability. It also means a bunch of other things, but I'd like to focus on dependability here. The roadmap discusses sharpening Rust's offerings in a few focus domains, and I think a key to doing that is by supporting the dependability of libraries that fit within them.

What exactly is dependability though? I think a dependable library consists of:

KodrAus /
Created Jan 13, 2018
A libz blitz retrospective

A libz blitz retrospective

The treacherous road to stabilisation is plagued by snakes and badgers. This picture has no relevence to the actual post.

This post is my personal retrospective of the libz blitz and my part in it. It's also a loose response to the [#Rust2018 call for blog posts] and a chance to show off my amazingly poor drawing skills. For the part most relevant to #Rust2018, see the last section.

For those who aren't familiar, the libz blitz was an initiative run by Rust's libs team in 2017 to address that year's roadmap goal of raising a solid core of the Rust crate ecosystem to a consistent level of completeness and quality. Specifically it aimed to improve the ecosystem maturity by evaluating and pushing a core set of crates to 1.0 stability. For more details, see [the original Rust Libz Blitz b

KodrAus / Elasticsearch
Last active Jul 23, 2017
Elasticsearch Aggregations
View Elasticsearch
#[macro_use] extern crate serde_derive;
#[macro_use] extern crate serde_json;
extern crate serde;
pub mod aggs {
use std::slice::Iter;
use std::borrow::Cow;
use std::collections::BTreeMap;
use serde::{Deserialize, Deserializer};
use serde_json::{Value, Map};
KodrAus / Updating .NET Core SDK used by
Created Apr 12, 2017
Updating .NET Core SDK used by VS
View Updating .NET Core SDK used by

Updating .NET Core SDK used by VS


Visual Studio ships with its own version of the .NET Core SDK. You can point Visual Studio at a different version of the SDK by setting the MSBuildSdksPath environment variable to the appropriate location before launching Visual Studio. For example: %localappdata%\Microsoft\dotnet\sdk\2.0.0-preview1-005783\Sdks.

You can’t perform that action at this time.