deserializeInputs function

Future<Inputs> deserializeInputs(
  1. Struct inputs,
  2. List<String> dependencyUrnsForKey(
    1. String key
    )
)

Deserializes provider input structs and applies dependency metadata.

Implementation

Future<Inputs> deserializeInputs(
  Struct inputs,
  List<String> Function(String key) dependencyUrnsForKey,
) async {
  final result = <String, Input<dynamic>>{};

  for (final entry in inputs.fields.entries) {
    final key = entry.key;
    final decoded = Deserializer.deserialize<dynamic>(entry.value);
    final value = decoded.value;
    final depsUrns = dependencyUrnsForKey(key);

    if (!decoded.isSecret &&
        (depsUrns.isEmpty ||
            containsOutputs(value) ||
            await _isResourceReference(value, depsUrns))) {
      result[key] = _asInput(value);
      continue;
    }

    final deps = depsUrns.map((urn) => DependencyResource(urn)).toSet();
    final wrapped = Output<dynamic>(
      Future.value(
        OutputData<dynamic>(
          value: value,
          isKnown: decoded.isKnown,
          isSecret: decoded.isSecret,
          resources: deps,
        ),
      ),
    );
    result[key] = Input.fromOutput(wrapped);
  }

  return result;
}