import 'package:tuuli_api/tuuli_api.dart'; extension ColumnsParser on TableDefinition { List get parsedColumns { return columns .split(",") .map((e) { final parts = e.split(":"); final name = parts[0]; switch (parts[1]) { case "serial": return PrimarySerialColumnDefinition(name); case "str": return TextColumnDefinition( name, parts.contains("unique"), parts.contains("default"), ); case "bool": return BooleanColumnDefinition( name, parts.contains("unique"), parts.contains("default"), ); case "datetime": return TimestampColumnDefinition( name, parts.contains("unique"), parts.contains("default"), ); case "float": return DoubleColumnDefinition( name, parts.contains("unique"), parts.contains("default"), ); case "int": return IntegerColumnDefinition( name, parts.contains("unique"), parts.contains("default"), ); case "int-user": return UserRefColumnDefinition(name); case "int-asset": return AssetRefColumnDefinition(name); } return null; }) .whereType() .toList(growable: false); } } abstract class DBColumnDefinition { final String name; final bool unique; final bool hasDefault; DBColumnDefinition({ required this.name, required this.unique, required this.hasDefault, }); } class PrimarySerialColumnDefinition extends DBColumnDefinition { PrimarySerialColumnDefinition(String name) : super(name: name, unique: false, hasDefault: false); } class TextColumnDefinition extends DBColumnDefinition { TextColumnDefinition(String name, bool unique, bool hasDefault) : super(name: name, unique: unique, hasDefault: hasDefault); } class BooleanColumnDefinition extends DBColumnDefinition { BooleanColumnDefinition(String name, bool unique, bool hasDefault) : super(name: name, unique: unique, hasDefault: hasDefault); } class TimestampColumnDefinition extends DBColumnDefinition { TimestampColumnDefinition(String name, bool unique, bool hasDefault) : super(name: name, unique: unique, hasDefault: hasDefault); } class DoubleColumnDefinition extends DBColumnDefinition { DoubleColumnDefinition(String name, bool unique, bool hasDefault) : super(name: name, unique: unique, hasDefault: hasDefault); } class IntegerColumnDefinition extends DBColumnDefinition { IntegerColumnDefinition(String name, bool unique, bool hasDefault) : super(name: name, unique: unique, hasDefault: hasDefault); } class UserRefColumnDefinition extends DBColumnDefinition { UserRefColumnDefinition(String name) : super(name: name, unique: false, hasDefault: false); } class AssetRefColumnDefinition extends DBColumnDefinition { AssetRefColumnDefinition(String name) : super(name: name, unique: false, hasDefault: false); }