// Copyright (C) 2022 WYATT GROUP // Please see the AUTHORS file for details. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . import 'dart:convert'; /// Defines some convert functions. abstract class Convert { /// Converts a list of bytes to a hex string. /// /// If [upperCase] is `true`, the hex string will be in uppercase. static String toHex(List bytes, {bool upperCase = false}) { final buffer = StringBuffer(); for (final int part in bytes) { if (part & 0xff != part) { throw const FormatException('Non-byte integer detected'); } buffer.write('${part < 16 ? '0' : ''}${part.toRadixString(16)}'); } if (upperCase) { return buffer.toString().toUpperCase(); } else { return buffer.toString(); } } /// Converts a map to a query string. /// /// If [encoding] is `null`, the default encoding is `utf8`. /// /// For example, the map `{a: 1, b: 2}` will be converted to `a=1&b=2`. static String mapToQuery(Map map, {Encoding? encoding}) { final pairs = >[]; map.forEach( (key, value) => pairs.add([ Uri.encodeQueryComponent(key, encoding: encoding ?? utf8), Uri.encodeQueryComponent(value, encoding: encoding ?? utf8), ]), ); return pairs.map((pair) => '${pair[0]}=${pair[1]}').join('&'); } } extension UriX on Uri { /// Returns a new [Uri] by appending the given [path] to this [Uri]. Uri operator +(String path) { final thisPath = toString(); return Uri.parse(thisPath + path); } }