Column.fromJson constructor

Column.fromJson(
  1. String colName,
  2. Map<String, dynamic> json,
  3. List<String> parentTableRequiredFields,
  4. Map<String, List<String>> enums, {
  5. bool jsonbToDynamic = false,
  6. String? schema,
  7. String? tableName,
  8. Map<String, JsonbModelConfig>? jsonbModels,
})

Implementation

factory Column.fromJson(String colName, Map<String, dynamic> json,
    List<String> parentTableRequiredFields, Map<String, List<String>> enums,
    {bool jsonbToDynamic = false,
    String? schema,
    String? tableName,
    Map<String, JsonbModelConfig>? jsonbModels}) {
  // PostgREST lists enum values on single-value columns only; array
  // columns rely on [enums], keyed by type name.
  final typeName = publicTypeName(json['format']);
  final enumValues = typeName == null
      ? <String>[]
      : json['enum'] != null
          ? List<String>.from(json['enum'])
          : enums[typeName] ?? <String>[];

  // Look up JSONB model config if available
  JsonbModelConfig? jsonbConfig;
  if (jsonbModels != null && schema != null && tableName != null) {
    final lookupKey = '$schema.$tableName.$colName';
    jsonbConfig = jsonbModels[lookupKey];
  }

  return Column(
    postgresFormat: json['format'],
    dbColName: colName,
    camelColName: snakeCasingToCamelCasing(colName),
    enumValues: enumValues,
    hasDefaultValue: json['description']?.contains('[supadart:serial]') ??
        json['default'] != null,
    description: json['description'],
    maxLength: json['maxLength'],
    isPrimaryKey: json['description']?.contains('<pk/>') ?? false,
    isSerialType: json['description']?.contains('[supadart:serial]') ?? false,
    isInRequiredColumn: parentTableRequiredFields.contains(colName),
    jsonbToDynamic: jsonbToDynamic,
    jsonbModelConfig: jsonbConfig,
  );
}