internal static unsafe StartNodeDescription2 CreateFromNative(IntPtr nativeRaw)
        {
            NativeTypes.FABRIC_START_NODE_DESCRIPTION2 native = *(NativeTypes.FABRIC_START_NODE_DESCRIPTION2 *)nativeRaw;
            StartNodeDescriptionUsingNodeName          startNodeDescriptionUsingNodeName = StartNodeDescriptionUsingNodeName.CreateFromNative(native.Value);

            return(new StartNodeDescription2(StartNodeDescriptionKind.UsingNodeName, startNodeDescriptionUsingNodeName));
        }
        internal IntPtr ToNative(PinCollection pinCollection)
        {
            var nativeStartNodeDescription2 = new NativeTypes.FABRIC_START_NODE_DESCRIPTION2();

            switch (this.DescriptionKind)
            {
            case StartNodeDescriptionKind.UsingNodeName:
                nativeStartNodeDescription2.Kind  = NativeTypes.FABRIC_START_NODE_DESCRIPTION_KIND.FABRIC_START_NODE_DESCRIPTION_KIND_USING_NODE_NAME;
                nativeStartNodeDescription2.Value =
                    ((StartNodeDescriptionUsingNodeName)this.Value).ToNative(pinCollection);
                break;

            case StartNodeDescriptionKind.UsingReplicaSelector:
                nativeStartNodeDescription2.Kind = NativeTypes.FABRIC_START_NODE_DESCRIPTION_KIND.FABRIC_START_NODE_DESCRIPTION_KIND_USING_REPLICA_SELECTOR;
                // not implemented now
                nativeStartNodeDescription2.Value = IntPtr.Zero;
                break;

            default:
                nativeStartNodeDescription2.Kind  = NativeTypes.FABRIC_START_NODE_DESCRIPTION_KIND.FABRIC_START_NODE_DESCRIPTION_KIND_INVALID;
                nativeStartNodeDescription2.Value = IntPtr.Zero;
                break;
            }

            return(pinCollection.AddBlittable(nativeStartNodeDescription2));
        }