public SwiftOptional()
 {
     unsafe
     {
         fixed(byte *p = StructMarshal.Marshaler.PrepareNominal(this))
         {
             NativeMethodsForSwiftOptional.NewNone(new IntPtr(p),
                                                   StructMarshal.Marshaler.Metatypeof(typeof(T)));
         }
     }
 }
        public SwiftOptional(T value)
        {
            var valueType = typeof(T);

            if (valueType.IsClass && EqualityComparer <T> .Default.Equals(value, default(T)))
            {
                throw new ArgumentNullException(nameof(value), $"SwiftOptional<{typeof (T).Name}> constructor requires a non-null object instance.");
            }
            unsafe
            {
                fixed(byte *retvalSwiftDataPtr = StructMarshal.Marshaler.PrepareNominal(this))
                {
                    var valPtr    = stackalloc byte [StructMarshal.Marshaler.Strideof(typeof(T))];
                    var valIntPtr = new IntPtr(valPtr);

                    valIntPtr = StructMarshal.Marshaler.ToSwift(value, valIntPtr);
                    NativeMethodsForSwiftOptional.NewSome(new IntPtr(retvalSwiftDataPtr),
                                                          valIntPtr,
                                                          StructMarshal.Marshaler.Metatypeof(typeof(T)));
                    StructMarshal.Marshaler.ReleaseSwiftPointer(typeof(T), valIntPtr);
                }
            }
        }
 public static SwiftMetatype GetSwiftMetatype()
 {
     return(NativeMethodsForSwiftOptional.PIMetadataAccessor_SwiftOptional(SwiftMetadataRequest.Complete,
                                                                           StructMarshal.Marshaler.Metatypeof(typeof(T))));
 }