letMapOrNone<K extends Object, V extends Object> function

Option<Map<K, Option<V>>> letMapOrNone<K extends Object, V extends Object>(
  1. dynamic input
)

Converts input to Map<K, Option<V>>, returning None on failure.

Supported types:

Implementation

Option<Map<K, Option<V>>> letMapOrNone<K extends Object, V extends Object>(
  dynamic input,
) {
  if (input is Outcome) {
    return switch (input.rawSync().value) {
      Ok(value: final okValue) => letMapOrNone<K, V>(
        NoStackOverflowWrapper(okValue),
      ),
      Err() => const None(),
    };
  }

  return switch (input is NoStackOverflowWrapper ? input.value : input) {
    final Map<dynamic, dynamic> m => _convertMapOrNone<K, V>(m),
    final String s => jsonDecodeOrNone<Map<dynamic, dynamic>>(
      s.trim(),
    ).map((d) => _convertMapOrNone<K, V>(d)).flatten(),
    final Outcome m => switch (m.rawSync().value) {
      Ok(value: final okValue) => letMapOrNone<K, V>(okValue),
      Err() => const None(),
    },
    _ => const None(),
  };
}