import 'package:freezed_annotation/freezed_annotation.dart'; part 'models.freezed.dart'; part 'models.g.dart'; @freezed class Version with _$Version { const Version._(); const factory Version(int major, int minor, int patch) = _Version; factory Version.fromJson(List values) { return Version(values[0], values[1], values[2]); } List toJson() => [major, minor, patch]; @override String toString() { return '$major.$minor.$patch'; } } @Freezed(unionKey: 'kind') class RpcResponse with _$RpcResponse { factory RpcResponse.success(Map body) = Success; factory RpcResponse.signal(String status, Map body) = Signal; factory RpcResponse.error( String status, String message, Map body) = RpcError; factory RpcResponse.fromJson(Map json) => _$RpcResponseFromJson(json); } @freezed class RpcState with _$RpcState { const factory RpcState(String version) = _RpcState; }