serialise one side

This commit is contained in:
Fraser Waters 2021-11-12 15:55:13 +00:00
parent fa11f3aac1
commit 85886b31ca
2 changed files with 27 additions and 13 deletions

View file

@ -47,6 +47,7 @@
<PackageReference Include="semver" Version="2.0.6" />
<PackageReference Include="Serilog.Extensions.Logging" Version="3.0.1" />
<PackageReference Include="Serilog.Sinks.Console" Version="3.1.1" />
<PackageReference Include="Ibasa.Pikala" Version="0.0.9" />
</ItemGroup>
<ItemGroup>

View file

@ -4,6 +4,12 @@ using System;
namespace Pulumi
{
public class DynamicResourceArgs : ResourceArgs
{
[Input("__provider")]
internal string Provider { get; set; } = null!;
}
public class DynamicResource : CustomResource
{
private static string GetTypeName(Resource resource)
@ -13,24 +19,31 @@ namespace Pulumi
return $"pulumi-dotnet:{typeName}";
}
private static ResourceArgs SerializeProvider(DynamicResourceProvider provider, ResourceArgs? args)
private static bool ByValueFilter(System.Reflection.Assembly assembly)
{
return args!;
//
// if PROVIDER_KEY in props:
// raise Exception("A dynamic resource must not define the __provider key")
//
// props = cast(dict, props)
// props[PROVIDER_KEY] = serialize_provider(provider)
//
// super().__init__(f"pulumi-python:{self._resource_type_name}", name, props, opts)
//
var pulumiAssembly = System.Reflection.Assembly.GetExecutingAssembly();
return assembly != pulumiAssembly;
}
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, ResourceArgs? args, CustomResourceOptions? options = null)
: base((Func<Resource, string>)GetTypeName, name, SerializeProvider(provider, args), options)
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
{
}