 
 extension Unicode {
   struct ParsingIterator<
-    CodeUnits : IteratorProtocol, 
+    CodeUnitIterator : IteratorProtocol, 
     Decoder: UnicodeDecoder
-  > where Decoder.Encoding.CodeUnit == CodeUnits.Element {
-    var codeUnits: CodeUnits
+  > where Decoder.Encoding.CodeUnit == CodeUnitIterator.Element {
+    var codeUnits: CodeUnitIterator
     var decoder: Decoder
   }
 }
+
 extension Unicode.ParsingIterator : IteratorProtocol, Sequence {
   mutating func next() -> Decoder.Encoding.EncodedScalar? {
-    switch decoder.parseOne(&codeUnits) {
+    switch decoder.parseScalar(from: &codeUnits) {
     case let .valid(scalarContent): return scalarContent
     case .invalid: return Decoder.Encoding.encodedReplacementCharacter
     case .emptyInput: return nil

extension Unicode.DefaultScalarView : BidirectionalCollection {
  @inline(__always)
  public func index(before i: Index) -> Index {
    var d = Encoding.ReverseDecoder()
    
    var more = ReverseIndexingIterator(
      _elements: codeUnits, _position: i.codeUnitIndex)
    
    switch d.parseOne(&more) {
    case .valid(let scalarContent):
      let d: CodeUnits.IndexDistance = -numericCast(scalarContent.count)
      return Index(

    }
    // Buffering mode.
    // Fill buffer back to 4 bytes (or as many as are left in the iterator).
    _sanityCheck(buffer._bitCount < _UInt32.bitWidth)
    repeat {
      if let codeUnit = input.next() {
        buffer.append(codeUnit)
