import 'dart:convert';

import 'package:nc_photos/object_extension.dart';

/// Convert a boolean to an indexable type in json for DB
///
/// This is needed because IndexedDB currently does not support creating an
/// index on a boolean value
Object? boolToJson(bool? value) => value?.run((v) => v ? 1 : 0);

/// Convert a boolean from an indexable type in json for DB
bool? boolFromJson(Object? value) => value?.run((v) => v != 0);

Object? tryJsonDecode(String source) {
  try {
    return jsonDecode(source);
  } catch (_) {
    return null;
  }
}

Object? jsonDecodeOr(String source, dynamic def) =>
    tryJsonDecode(source) ?? def;