private void ReadResult(Type resType, Type resultType, object result, PlanResourceChange.Types.Response response)
        {
            var diagnostics = ((TFDiagnostics)resultType
                               .GetProperty(nameof(response.Diagnostics)).GetValue(result));
            var plannedPrivate = resultType
                                 .GetProperty(nameof(response.PlannedPrivate)).GetValue(result);
            var plannedState = resultType
                               .GetProperty(nameof(response.PlannedState)).GetValue(result);
            var requiresReplace = resultType
                                  .GetProperty(nameof(response.RequiresReplace)).GetValue(result);

            if (diagnostics.Count() > 0)
            {
                response.Diagnostics.Add(diagnostics.All());
            }
            if (plannedPrivate != null)
            {
                response.PlannedPrivate = ByteString.CopyFrom((byte[])plannedPrivate);
            }
            if (plannedState != null)
            {
                response.PlannedState = plannedState.MarshalToDynamicValue(resType, withUnknowns: true);
            }


            if (requiresReplace != null)
            {
                // Translates our internal representation of ValuePath to AttributePath
                var paths = (IEnumerable <TFSteps>)requiresReplace;
                response.RequiresReplace.Add(TFAttributePaths.ToPaths(paths));
            }
        }
        public PlanResourceChangeResult <RegistryKeyResource> PlanChange(
            PlanResourceChangeInput <RegistryKeyResource> input)
        {
            _log.LogDebug("{method}: ", nameof(PlanChange));
            _log.LogTrace("->input = {@input}", input);

            _log.LogDebug("  * .....Config: " + JsonConvert.SerializeObject(input.Config, Formatting.Indented));
            _log.LogDebug("  * ......Prior: " + JsonConvert.SerializeObject(input.PriorState, Formatting.Indented));
            _log.LogDebug("  * ...Proposed: " + JsonConvert.SerializeObject(input.ProposedNewState, Formatting.Indented));

            var result  = new PlanResourceChangeResult <RegistryKeyResource>();
            var replace = new TFAttributePaths();

            result.RequiresReplace = ResolveRequiresReplace(input.PriorState, input.Config);
            result.PlannedState    = input.ProposedNewState;
            result.PlannedPrivate  = input.PriorPrivate;

            _log.LogTrace("<-result = {@result}", result);
            return(result);
        }