blob: 2f0594c770832d2e233865f18050dfcaac67c025 [file] [log] [blame]
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'package:built_collection/built_collection.dart';
import 'package:built_value/built_value.dart';
import 'package:meta/meta.dart';
import '../base.dart';
import '../visitors.dart';
import 'expression.dart';
import 'reference.dart';
part 'type_record.g.dart';
@immutable
abstract class RecordType extends Expression
implements Built<RecordType, RecordTypeBuilder>, Reference, Spec {
factory RecordType([
void Function(RecordTypeBuilder) updates,
]) = _$RecordType;
RecordType._();
@override
R accept<R>(
SpecVisitor<R> visitor, [
R? context,
]) =>
visitor.visitRecordType(this, context);
BuiltList<Reference> get positionalFieldTypes;
BuiltMap<String, Reference> get namedFieldTypes;
@override
String? get url => null;
@override
String? get symbol => null;
@override
Reference get type => this;
/// Optional nullability.
bool? get isNullable;
@override
Expression newInstance(
Iterable<Expression> positionalArguments, [
Map<String, Expression> namedArguments = const {},
List<Reference> typeArguments = const [],
]) =>
throw UnsupportedError('Cannot instantiate a record type.');
@override
Expression newInstanceNamed(
String name,
Iterable<Expression> positionalArguments, [
Map<String, Expression> namedArguments = const {},
List<Reference> typeArguments = const [],
]) =>
throw UnsupportedError('Cannot instantiate a record type.');
@override
Expression constInstance(
Iterable<Expression> positionalArguments, [
Map<String, Expression> namedArguments = const {},
List<Reference> typeArguments = const [],
]) =>
throw UnsupportedError('Cannot "const" a record type.');
@override
Expression constInstanceNamed(
String name,
Iterable<Expression> positionalArguments, [
Map<String, Expression> namedArguments = const {},
List<Reference> typeArguments = const [],
]) =>
throw UnsupportedError('Cannot "const" a record type.');
}
abstract class RecordTypeBuilder extends Object
implements Builder<RecordType, RecordTypeBuilder> {
factory RecordTypeBuilder() = _$RecordTypeBuilder;
RecordTypeBuilder._();
ListBuilder<Reference> positionalFieldTypes = ListBuilder<Reference>();
MapBuilder<String, Reference> namedFieldTypes =
MapBuilder<String, Reference>();
bool? isNullable;
String? url;
String? symbol;
}