HeapString SerializeScript(const ScriptObject& obj, const ISirenType& type, SirenCoderType coder/* = SirenCoderType::Compact*/) { #ifdef MEDUSA_LUA SirenLuaReader reader(obj.State()); #endif switch (coder) { case SirenCoderType::Compact: { StringStream stream; SirenCompactBinaryWriter writer(stream); SirenReaderWriter rw(reader, writer); if (rw.Run(type)) { return stream.CurrentBuffer(); } return HeapString::Empty; } case SirenCoderType::Fast: { StringStream stream; SirenFastBinaryWriter writer(stream); SirenReaderWriter rw(reader, writer); if (rw.Run(type)) { return stream.CurrentBuffer(); } return HeapString::Empty; } case SirenCoderType::Json: { StringStream stream; SirenJsonWriter writer(stream); SirenReaderWriter rw(reader, writer); if (rw.Run(type)) { return stream.CurrentBuffer(); } return HeapString::Empty; } } return HeapString::Empty; }