Beispiel #1
0
 /// <summary>
 /// Write the name/version/maxid of an imported table.
 /// </summary>
 /// <param name="writer">Current writer.</param>
 /// <param name="importedTable">Imported table.</param>
 /// <remarks>This assumes the writer is in the import list.</remarks>
 internal static void WriteImportTable(this IIonWriter writer, ISymbolTable importedTable)
 {
     writer.StepIn(IonType.Struct); // {name:'a', version: 1, max_id: 33}
     writer.SetFieldNameSymbol(GetSystemSymbol(SystemSymbols.NameSid));
     writer.WriteString(importedTable.Name);
     writer.SetFieldNameSymbol(GetSystemSymbol(SystemSymbols.VersionSid));
     writer.WriteInt(importedTable.Version);
     writer.SetFieldNameSymbol(GetSystemSymbol(SystemSymbols.MaxIdSid));
     writer.WriteInt(importedTable.MaxId);
     writer.StepOut();
 }
Beispiel #2
0
 protected override void WriteBodyTo(IIonWriter writer, ISymbolTableProvider symbolTableProvider)
 {
     if (IsNullValue())
     {
         writer.WriteNull(IonType.Int);
     }
     else if (_bigInteger != null)
     {
         writer.WriteInt(_bigInteger.Value);
     }
     else
     {
         writer.WriteInt(_longValue);
     }
 }
Beispiel #3
0
        private static void RunOnce()
        {
            Writer.StepIn(IonType.List);
            for (var i = 0; i < 1000; i++)
            {
                Writer.StepIn(IonType.Struct);

                Writer.SetFieldName("boolean");
                Writer.WriteBool(true);
                Writer.SetFieldName("string");
                Writer.WriteString("this is a string");
                Writer.SetFieldName("integer");
                Writer.WriteInt(int.MaxValue);
                Writer.SetFieldName("float");
                Writer.WriteFloat(432.23123f);
                Writer.SetFieldName("timestamp");
                Writer.WriteTimestamp(new Timestamp(new DateTime(2000, 11, 11)));

                Writer.StepOut();
            }

            byte[] bytes = null;
            Writer.StepOut();
            Writer.Flush(ref bytes);
            Writer.Finish();
        }
 /// <summary>
 /// Serialize long value.
 /// </summary>
 ///
 /// <param name="writer">The Ion writer to be used for serialization.</param>
 /// <param name="item">The long value to serialize.</param>
 public override void Serialize(IIonWriter writer, long item)
 {
     writer.SetTypeAnnotations(new List <string>()
     {
         ANNOTATION
     });
     writer.WriteInt(item);
 }
 public override void Serialize(IIonWriter writer, Course item)
 {
     writer.StepIn(IonType.Struct);
     writer.SetFieldName("Sections");
     writer.WriteInt(updateCourseSections.RemoveSections(item.Sections));
     writer.SetFieldName("MeetingTime");
     writer.WriteString(updateCourseSections.ShowNewTime());
     writer.StepOut();
 }
Beispiel #6
0
        private static void Serializers(IonType type, dynamic value, IIonWriter writer)
        {
            switch (type)
            {
            case IonType.Bool:
                writer.WriteBool(value);
                break;

            case IonType.Blob:
                writer.WriteBlob(value);
                break;

            case IonType.Clob:
                writer.WriteClob(value);
                break;

            case IonType.Decimal:
                writer.WriteDecimal(value);
                break;

            case IonType.Float:
                writer.WriteFloat(value);
                break;

            case IonType.Int:
                writer.WriteInt(value);
                break;

            case IonType.String:
                writer.WriteString(value);
                break;

            case IonType.Symbol:
                writer.WriteString(value.Text);
                break;

            case IonType.Timestamp:
                writer.WriteTimestamp(value);
                break;

            case IonType.Null:
                writer.WriteNull(value);
                break;

            default:
                throw new InvalidOperationException("Unexpected type '" + type + "'");
            }
        }
Beispiel #7
0
        /// <summary>
        /// Just write a bunch of scalar values
        /// </summary>
        private static List <(string key, object value)> WriteFlat(IIonWriter writer)
        {
            var kvps = new List <(string key, object value)>();

            void writeAndAdd <T>(string fieldName, T value, Action <T> writeAction)
            {
                writer.SetFieldName(fieldName);
                writeAction(value);
                kvps.Add((fieldName, value));
            }

            writeAndAdd("boolean", true, writer.WriteBool);
            writeAndAdd("cstring", "somestring", writer.WriteString);
            writeAndAdd("int", 123456, i => writer.WriteInt(i));
            writeAndAdd("long", long.MaxValue / 10000, writer.WriteInt);
            writeAndAdd("datetime", new Timestamp(new DateTime(2000, 11, 11, 11, 11, 11, DateTimeKind.Utc)), writer.WriteTimestamp);
            writeAndAdd("decimal", 6.34233242123123123423m, writer.WriteDecimal);
            writeAndAdd("float", 231236.321312f, d => writer.WriteFloat(d));
            writeAndAdd("double", 231345.325667d * 133.346432d, writer.WriteFloat);

            return(kvps);
        }
        private static bool TryWriteScalar(IIonWriter writer, object obj, Type type, IScalarWriter scalarWriter)
        {
            if (type.IsEnum)
            {
                var propValue = Enum.GetName(type, obj);
                writer.WriteSymbol(propValue);
                return(true);
            }

            if (type == typeof(string))
            {
                var propValue = (string)obj;
                writer.WriteString(propValue);
                return(true);
            }

            if (type == typeof(int))
            {
                var propValue = (int)obj;
                writer.WriteInt(propValue);
                return(true);
            }

            if (type == typeof(long))
            {
                var propValue = (long)obj;
                writer.WriteInt(propValue);
                return(true);
            }

            if (type == typeof(bool))
            {
                var propValue = (bool)obj;
                writer.WriteBool(propValue);
                return(true);
            }

            if (type == typeof(float))
            {
                var propValue = (float)obj;
                writer.WriteFloat(propValue);
                return(true);
            }

            if (type == typeof(double))
            {
                var propValue = (double)obj;
                writer.WriteFloat(propValue);
                return(true);
            }

            if (type == typeof(DateTime))
            {
                var propValue = (DateTime)obj;
                writer.WriteTimestamp(new Timestamp(propValue));
                return(true);
            }

            if (type == typeof(DateTimeOffset))
            {
                var propValue = (DateTimeOffset)obj;
                writer.WriteTimestamp(new Timestamp(propValue));
                return(true);
            }

            if (type == typeof(decimal))
            {
                var propValue = (decimal)obj;
                writer.WriteDecimal(propValue);
                return(true);
            }

            //try to see if we can write use the scalar writer
            if (scalarWriter != null)
            {
                var method        = scalarWriter.GetType().GetMethod(nameof(IScalarWriter.TryWriteValue));
                var genericMethod = method.MakeGenericMethod(type);
                return((bool)genericMethod.Invoke(scalarWriter, new[] { writer, obj }));
            }

            return(false);
        }
 public override void Serialize(IIonWriter writer, long item)
 {
     writer.WriteInt(-item);
 }
 /// <summary>
 /// Serialize int value.
 /// </summary>
 ///
 /// <param name="writer">The Ion writer to be used for serialization.</param>
 /// <param name="item">The int value to serialize.</param>
 public override void Serialize(IIonWriter writer, int item)
 {
     writer.WriteInt(item);
 }