pulumi/sdk/dotnet/Pulumi/Resources/DynamicResource.cs
Fraser Waters c8336bdc38 rm loggign
2021-11-12 18:55:41 +00:00

56 lines
2 KiB
C#

// Copyright 2016-2019, Pulumi Corporation
using System;
namespace Pulumi
{
public class DynamicResourceArgs : ResourceArgs
{
[Input("__provider", required: true)]
public Input<string> Provider { get; set; } = null!;
}
public class DynamicResource : CustomResource
{
private static string GetTypeName(Resource resource)
{
var type = resource.GetType();
var typeName = string.IsNullOrEmpty(type.Namespace) ? $"dynamic:{type.Name}" : $"dynamic/{type.Namespace}:{type.Name}";;
return $"pulumi-dotnet:{typeName}";
}
private static bool ByValueFilter(System.Reflection.Assembly assembly)
{
// Assemblies known to be used for defining dynamic providers
var knownAssemblies = new string [] {
"Pulumi", "System.Collections.Immutable"
};
var assemblyName = assembly.GetName().Name;
return !Array.Exists(knownAssemblies, name => name == assemblyName);
}
private static ResourceArgs SetProvider(DynamicResourceProvider provider, DynamicResourceArgs? args)
{
if (args == null)
{
args = new DynamicResourceArgs();
}
var pickler = new Ibasa.Pikala.Pickler(ByValueFilter);
var memoryStream = new System.IO.MemoryStream();
pickler.Serialize(memoryStream, provider);
var base64String = System.Convert.ToBase64String(memoryStream.ToArray());
args.Provider = base64String;
return args;
}
#pragma warning disable RS0022 // Constructor make noninheritable base class inheritable
public DynamicResource(DynamicResourceProvider provider, string name, DynamicResourceArgs? args, CustomResourceOptions? options = null)
: base((Func<Resource, string>)GetTypeName, name, SetProvider(provider, args), options)
#pragma warning restore RS0022 // Constructor make noninheritable base class inheritable
{
}
}
}