stow_codecs

A collection of codecs and utilities commonly used with stow packages like stow_plain.

pub.dev License maintained with melos

Custom codecs

If you need to write your own codec, it may be easier/quicker to use these utility classes instead of the base Codec class from dart:convert...

AbstractCodec

An abstract codec whose encode and decode methods need to be overridden.

This requires less boilerplate than extending Codec directly since you don't need to define the Converter classes separately.

A simple example (identical to IntToStringCodec below):

class MyIntCodec extends AbstractCodec<int, String> {
  const MyIntCodec();
  @override String encode(int input) => input.toString();
  @override int decode(String input) => int.parse(input);
}

DelegateCodec

A codec that delegates encoding and decoding to the functions provided to its constructor.

Compared to AbstractCodec, a DelegateCodec definition can be more concise and can even be defined inline since you don't need to write a class. However, since its constructor takes functions, it cannot be made const.

A simple example (identical to IntToStringCodec below except not const):

final myIntCodec = DelegateCodec<int, String>(
  encode: (input) => input.toString(),
  decode: (encoded) => int.parse(encoded),
);

Ready-made codecs

We also have a few codecs that are ready to use without any extra code...

BoolToStringCodec

Converts between bool and String types, e.g. true <-> 'true'.

Usage: const BoolToStringCodec().

ColorCodec

Encodes a Color as an ARGB32 integer, e.g. Color(0xFF123456) <-> 0xFF123456.

Usage: const ColorCodec().

DateTimeCodec

Encodes a DateTime as an ISO 8601 string, e.g. DateTime.utc(1969, 7, 20, 20, 18, 04) <-> '1969-07-20T20:18:04.000Z'.

Usage: const DateTimeCodec().

EnumCodec

Encodes an enum value as its index, e.g. Fruits.banana <-> 1.

Usage:

enum Fruits {
  apple, banana, cherry;

  // Define it directly in the enum...
  static const codec = EnumCodec(values);
}
// ...or outside the enum...
final codec = EnumCodec(Fruits.values);

IdentityCodec

Does nothing to its input.

Usage: const IdentityCodec()

IntToStringCodec

Converts between int and String types, e.g. 123 <-> '123'.

Usage: const IntToStringCodec().

TypedJsonCodec

The same as Dart's built-in JsonCodec but with loosened type constraints.

Typically, you would not use this directly. It is internally used in stow_plain's PlainStow.json constructor.

Libraries

stow_codecs