mirror of
https://gitlab.com/veilid/veilid.git
synced 2025-07-27 17:05:27 -04:00
freezed
This commit is contained in:
parent
e3d66b60e4
commit
d6999c36a9
22 changed files with 9697 additions and 1183 deletions
|
@ -1,6 +1,9 @@
|
|||
import 'dart:convert';
|
||||
import 'dart:typed_data';
|
||||
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||
|
||||
String base64UrlNoPadEncode(List<int> bytes) {
|
||||
var x = base64Url.encode(bytes);
|
||||
while (x.endsWith('=')) {
|
||||
|
@ -20,97 +23,91 @@ Uint8List base64UrlNoPadDecodeDynamic(dynamic source) {
|
|||
return base64.decode(source);
|
||||
}
|
||||
|
||||
abstract class EncodedString {
|
||||
late String contents;
|
||||
EncodedString(String s) {
|
||||
validate(s);
|
||||
contents = s;
|
||||
}
|
||||
EncodedString.encode(List<int> b) {
|
||||
var s = base64UrlNoPadEncode(b);
|
||||
validate(s);
|
||||
contents = s;
|
||||
}
|
||||
@immutable
|
||||
abstract class EncodedString extends Equatable {
|
||||
final String contents;
|
||||
@override
|
||||
List<Object> get props => [contents];
|
||||
|
||||
int encodedLength();
|
||||
int decodedLength();
|
||||
void validate(String s) {
|
||||
var d = base64UrlNoPadDecode(s);
|
||||
if (d.length != decodedLength()) {
|
||||
throw Exception("length ${s.length} should be ${encodedLength()}");
|
||||
}
|
||||
}
|
||||
const EncodedString(String s) : contents = s;
|
||||
|
||||
Uint8List decode() {
|
||||
return base64UrlNoPadDecode(contents);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return contents;
|
||||
}
|
||||
String toString() => contents;
|
||||
|
||||
static T fromString<T extends EncodedString>(String s) {
|
||||
switch (T) {
|
||||
case FixedEncodedString32:
|
||||
return FixedEncodedString32(s) as T;
|
||||
return FixedEncodedString32.fromString(s) as T;
|
||||
case FixedEncodedString43:
|
||||
return FixedEncodedString43(s) as T;
|
||||
return FixedEncodedString43.fromString(s) as T;
|
||||
case FixedEncodedString86:
|
||||
return FixedEncodedString86(s) as T;
|
||||
return FixedEncodedString86.fromString(s) as T;
|
||||
default:
|
||||
throw UnimplementedError();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@immutable
|
||||
class FixedEncodedString32 extends EncodedString {
|
||||
FixedEncodedString32(String s) : super(s);
|
||||
@override
|
||||
int encodedLength() {
|
||||
const FixedEncodedString32._(String s) : super(s);
|
||||
static int encodedLength() {
|
||||
return 32;
|
||||
}
|
||||
|
||||
@override
|
||||
int decodedLength() {
|
||||
static int decodedLength() {
|
||||
return 24;
|
||||
}
|
||||
|
||||
String toJson() {
|
||||
return toString();
|
||||
factory FixedEncodedString32.fromString(String s) {
|
||||
var d = base64UrlNoPadDecode(s);
|
||||
if (d.length != decodedLength()) {
|
||||
throw Exception("length ${s.length} should be ${encodedLength()}");
|
||||
}
|
||||
return FixedEncodedString32._(s);
|
||||
}
|
||||
|
||||
FixedEncodedString32.fromJson(dynamic json) : this(json as String);
|
||||
String toJson() => toString();
|
||||
factory FixedEncodedString32.fromJson(dynamic json) =>
|
||||
FixedEncodedString32.fromString(json as String);
|
||||
}
|
||||
|
||||
@immutable
|
||||
class FixedEncodedString43 extends EncodedString {
|
||||
FixedEncodedString43(String s) : super(s);
|
||||
@override
|
||||
int encodedLength() {
|
||||
const FixedEncodedString43._(String s) : super(s);
|
||||
static int encodedLength() {
|
||||
return 43;
|
||||
}
|
||||
|
||||
@override
|
||||
int decodedLength() {
|
||||
static int decodedLength() {
|
||||
return 32;
|
||||
}
|
||||
|
||||
String toJson() {
|
||||
return toString();
|
||||
factory FixedEncodedString43.fromString(String s) {
|
||||
var d = base64UrlNoPadDecode(s);
|
||||
if (d.length != decodedLength()) {
|
||||
throw Exception("length ${s.length} should be ${encodedLength()}");
|
||||
}
|
||||
return FixedEncodedString43._(s);
|
||||
}
|
||||
|
||||
FixedEncodedString43.fromJson(dynamic json) : this(json as String);
|
||||
String toJson() => toString();
|
||||
factory FixedEncodedString43.fromJson(dynamic json) =>
|
||||
FixedEncodedString43.fromString(json as String);
|
||||
}
|
||||
|
||||
@immutable
|
||||
class FixedEncodedString86 extends EncodedString {
|
||||
FixedEncodedString86(String s) : super(s);
|
||||
@override
|
||||
int encodedLength() {
|
||||
const FixedEncodedString86._(String s) : super(s);
|
||||
static int encodedLength() {
|
||||
return 86;
|
||||
}
|
||||
|
||||
@override
|
||||
int decodedLength() {
|
||||
static int decodedLength() {
|
||||
return 64;
|
||||
}
|
||||
|
||||
|
@ -118,5 +115,14 @@ class FixedEncodedString86 extends EncodedString {
|
|||
return toString();
|
||||
}
|
||||
|
||||
FixedEncodedString86.fromJson(dynamic json) : this(json as String);
|
||||
factory FixedEncodedString86.fromString(String s) {
|
||||
var d = base64UrlNoPadDecode(s);
|
||||
if (d.length != decodedLength()) {
|
||||
throw Exception("length ${s.length} should be ${encodedLength()}");
|
||||
}
|
||||
return FixedEncodedString86._(s);
|
||||
}
|
||||
|
||||
factory FixedEncodedString86.fromJson(dynamic json) =>
|
||||
FixedEncodedString86.fromString(json as String);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue