StandardLibrary/runtimes/net/Extern/UTF8.cs (46 lines of code) (raw):

// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 using System; using System.Text; using Wrappers_Compile; using ibyteseq = Dafny.ISequence<byte>; using byteseq = Dafny.Sequence<byte>; using icharseq = Dafny.ISequence<char>; using charseq = Dafny.Sequence<char>; namespace UTF8 { public partial class __default { public static _IResult<ibyteseq, icharseq> Encode(icharseq str) { UTF8Encoding utf8 = new UTF8Encoding(false, true); try { byte[] utf8Bytes = utf8.GetBytes(str.Elements); return Result<ibyteseq, icharseq>.create_Success(byteseq.FromArray(utf8Bytes)); } catch (EncoderFallbackException e) { return Result<ibyteseq, icharseq> .create_Failure(Dafny.Sequence<char>.FromString("Input contains invalid Unicode characters")); } catch (ArgumentNullException e) { return Result<ibyteseq, icharseq> .create_Failure(Dafny.Sequence<char>.FromString("Input is null")); } } public static _IResult<icharseq, icharseq> Decode(ibyteseq bytes) { UTF8Encoding utf8 = new UTF8Encoding(false, true); try { string decoded = utf8.GetString(bytes.Elements); return Result<icharseq, icharseq>.create_Success(charseq.FromString(decoded)); } catch (ArgumentException e) { // GetString is defined as returning ArgumentException, ArgumentNullException, DecoderFallbackException // Both ArgumentNullException and DecoderFallbackException are children of ArgumentException return Result<icharseq, icharseq> .create_Failure(Dafny.Sequence<char>.FromString("Input contains an invalid Unicode code point")); } } } }