private static extern void DestroyEvent(YamlEvent *pEvent);
private static extern int CreateEventMappingEnd(YamlEvent* pEvent);
private static extern int CreateEventAlias(YamlEvent* pEvent, YamlString alias);
private static extern int CreateEventSequenceEnd(YamlEvent* pEvent);
private static extern int CreateEventMappingStart( YamlEvent *pEvent, YamlString anchor, YamlString tag, int aImplicit, YamlMappingStyle aStyle);
private static extern int CreateEventDocumentEnd( YamlEvent *pEvent, int aImplicit);
private static extern int CreateEventScalar( YamlEvent *pEvent, YamlString anchor, YamlString tag, YamlString value, int aLength, int aPlainImplicit, int aQuotedImplicit, YamlScalarStyle aStyle);
private static extern int CreateEventDocumentStart( YamlEvent *pEvent, YamlVersionDirective *pVersionDirective, YamlTagDirective *pTagDirectivesStart, YamlTagDirective *pTagDirectivesEnd, int aImplicit);
private static extern int CreateEventStreamEnd(YamlEvent* pEvent);
private static extern int CreateEventStreamStart( YamlEvent *pEvent, YamlEncoding aEncoding);
private static extern int Emit( IntPtr pNativeEmitter, YamlEvent *pEvent);
private static unsafe void GenerateEvent(IntPtr pNativeEmitter, Func<IntPtr, int> eventInit) { var @event = new YamlEvent(); // This method is unsafe, so the @event struct is already fixed on the stack. // However, you can't pass unsafe types into lambdas so we have to cast to an IntPtr. var pEvent = &@event; if (0 == eventInit((IntPtr)pEvent)) { throw new Exception("Failed to initialize YAML serialization event"); } try { Emit(pNativeEmitter, pEvent); } finally { DestroyEvent(pEvent); } }