     }
   }
 
+  /// Encode a `UnicodeScalar` as a series of `CodeUnit`\ s by `put`\
+  /// 'ing each `CodeUnit` to `output`.
   public static func encode<
       S : SinkType where S.Element == CodeUnit
   >(input: UnicodeScalar, inout output: S) {

    return .Result(UnicodeScalar(result & 0x001fffff)) // 21 bits
  }

  public static func encode<
    S : SinkType where S.Element == CodeUnit
  >(input: UnicodeScalar, inout output: S) {

}

public struct UTF32 : UnicodeCodecType {
  /// A type that can hold `code unit
  /// <http://www.unicode.org/glossary/#code_unit>`_ values for this
  /// encoding.
  public typealias CodeUnit = UInt32

  public init() {}

  /// Start or continue decoding a UTF sequence.
  ///
  /// In order to decode a code unit sequence completely, this function should
  /// be called repeatedly until it returns `UnicodeDecodingResult.EmptyInput`.
  /// Checking that the generator was exhausted is not sufficient.  The decoder
  /// can have an internal buffer that is pre-filled with data from the input
  /// generator.
  ///
  /// Because of buffering, it is impossible to find the corresponing position
  /// in the generator for a given returned `UnicodeScalar` or an error.
  ///
  /// :param: `next`: a *generator* of code units to be decoded.
  public mutating func decode<
    G : GeneratorType where G.Element == CodeUnit
  >(inout input: G) -> UnicodeDecodingResult {
