HtmlMetadata.fromJson constructor

HtmlMetadata.fromJson(
  1. Map<String, dynamic> json
)

Implementation

factory HtmlMetadata.fromJson(Map<String, dynamic> json) {
  // The Rust serializes metadata as {"document": {...}, "links": [...], ...}
  final document = json['document'] as Map<String, dynamic>? ?? {};

  // keywords can be a list of strings or a string
  List<String> parseKeywords(dynamic kw) {
    if (kw is List) return kw.map((e) => e.toString()).toList();
    if (kw is String) return kw.split(',').map((e) => e.trim()).toList();
    return [];
  }

  return HtmlMetadata(
    title: document['title'] as String?,
    description: document['description'] as String?,
    author: document['author'] as String?,
    language: document['language'] as String?,
    keywords: parseKeywords(document['keywords']),
    canonicalUrl: document['canonical_url'] as String?,
    baseHref: document['base_href'] as String?,
    links: (json['links'] as List?)
            ?.map((l) => LinkMetadata.fromJson(l as Map<String, dynamic>))
            .toList() ??
        [],
    images: (json['images'] as List?)
            ?.map((i) => ImageMetadata.fromJson(i as Map<String, dynamic>))
            .toList() ??
        [],
    structuredData: (json['structured_data'] as List?)
            ?.map((s) => Map<String, dynamic>.from(s as Map))
            .toList() ??
        [],
  );
}