 extension _UTF8Decoder where Buffer == _UIntBuffer<UInt32, UInt8> {
   public mutating func parseOne<I : IteratorProtocol>(
     _ input: inout I
-  ) -> Unicode.ParseResult<Buffer> where I.Element == Unicode.UTF8.CodeUnit {
+  ) -> Unicode.ParseResult<EncodedScalar>
+    where I.Element == Unicode.UTF8.CodeUnit {
 
     // Bufferless ASCII fastpath.
     if _fastPath(buffer.isEmpty) {
       guard let codeUnit = input.next() else { return .emptyInput }
       // ASCII, return immediately.
       if codeUnit & 0x80 == 0 {
-        return .valid(Buffer(containing: codeUnit))
+        return .valid(EncodedScalar(containing: codeUnit))
       }
       // Non-ASCII, proceed to buffering mode.
       buffer.append(codeUnit)


  mutating func parseOne<I : IteratorProtocol>(
    _ input: inout I
  ) -> Unicode.ParseResult<Buffer> where I.Element == CodeUnit

  static func decodeOne(_ content: Buffer) -> UnicodeScalar
}

extension UnicodeDecoder {

extension UTF8.ReverseDecoder : _UTF8Decoder {
  public typealias CodeUnit = UInt8

  public static func decodeOne(_ source: EncodedScalar) -> UnicodeScalar {
    let bits = source._storage
    switch source._bitCount {
    case 8: return UnicodeScalar(_unchecked: bits)
    case 16:
      var value = bits       & 0b0______________________11_1111
