// Copyright 2021 The Cobalt Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// https://encoding.spec.whatwg.org/#interface-textdecoder

[
  Constructor(optional DOMString label = "utf-8",
              optional TextDecoderOptions options),
  RaisesException = Constructor
] interface TextDecoder {
  // https://encoding.spec.whatwg.org/#textdecodercommon
  readonly attribute DOMString encoding;
  readonly attribute boolean fatal;
  readonly attribute boolean ignoreBOM;

  [RaisesException] USVString decode(optional BufferSource input,
                                     optional TextDecodeOptions options);
};
