ThingDescription.fromJson constructor

ThingDescription.fromJson(
  1. Map<String, dynamic> json, {
  2. bool validate = true,
})

Creates a ThingDescription from a json object.

Implementation

factory ThingDescription.fromJson(
  Map<String, dynamic> json, {
  bool validate = true,
}) {
  if (validate) {
    final validationResult = thingDescriptionSchema.validate(json);
    if (!validationResult.isValid) {
      throw ValidationException(
        "Validation of Thing Description failed.",
        validationResult.errors,
      );
    }
  }

  final Set<String> parsedFields = {};

  final context = json.parseContext(parsedFields);
  final prefixMapping = context.prefixMapping;

  final atType = json.parseArrayField<String>("@type", parsedFields);
  final title = json.parseRequiredField<String>("title", parsedFields);
  final titles = json.parseMapField<String>("titles", parsedFields);
  final description = json.parseField<String>("description", parsedFields);
  final descriptions =
      json.parseMapField<String>("descriptions", parsedFields);
  final version = json.parseVersionInfo(prefixMapping, parsedFields);
  final created = json.parseDateTime("created", parsedFields);
  final modified = json.parseDateTime("modified", parsedFields);
  final support = json.parseUriField("support", parsedFields);
  final base = json.parseUriField("base", parsedFields);
  final id = json.parseField<String>("id", parsedFields);

  final security =
      json.parseArrayField<String>("security", parsedFields) ?? [];

  final securityDefinitions =
      json.parseSecurityDefinitions(prefixMapping, parsedFields) ?? {};

  final forms = json.parseForms(prefixMapping, parsedFields);

  final properties = json.parseProperties(prefixMapping, parsedFields);
  final actions = json.parseActions(prefixMapping, parsedFields);
  final events = json.parseEvents(prefixMapping, parsedFields);

  final links = json.parseLinks(prefixMapping, parsedFields);

  final profile = json.parseUriArrayField("profile", parsedFields);
  final schemaDefinitions = json.parseDataSchemaMapField(
    "schemaDefinitions",
    prefixMapping,
    parsedFields,
  );
  final uriVariables =
      json.parseMapField<Object>("uriVariables", parsedFields);
  final additionalFields =
      json.parseAdditionalFields(prefixMapping, parsedFields);

  return ThingDescription._(
    context: context,
    title: title,
    titles: titles,
    description: description,
    descriptions: descriptions,
    version: version,
    created: created,
    modified: modified,
    support: support,
    base: base,
    id: id,
    forms: forms,
    properties: properties,
    actions: actions,
    events: events,
    links: links,
    profile: profile,
    schemaDefinitions: schemaDefinitions,
    uriVariables: uriVariables,
    additionalFields: additionalFields,
    security: security,
    securityDefinitions: securityDefinitions,
    atType: atType,
    rawThingDescription: json,
  );
}