/// <summary> /// Returns Broombridge deserialized into the current version data structure. /// Data structure is automatically updated to the current Broombridge version. /// </summary> /// <param name="filename">Broombridge file address.</param> /// <returns>Deserializer Broombridge data strauture.</returns> public static Data DeserializeBroombridge(string filename) { VersionNumber versionNumber = GetVersionNumber(filename); var output = new V0_2.Data(); if (versionNumber == VersionNumber.v0_1) { output = DataStructures.Update(Deserialize <V0_1.Data>(filename)); } else if (versionNumber == VersionNumber.v0_2) { output = Deserialize <V0_2.Data>(filename); } else { throw new System.InvalidOperationException("Unrecognized Broombridge version number."); } return(new Data(output)); }
/// <summary> /// Returns Broombridge deserialized into the current version data structure. /// Data structure is automatically updated to the current Broombridge version. /// </summary> /// <param name="reader">Stream for reading Broombridge data.</param> /// <returns>Deserializer Broombridge data structure.</returns> public static Data DeserializeBroombridge(TextReader reader) { // We'll need the stream twice: once to get the version of // Broombridge used to serialize the data, // and again to actually deserialize once we know the right // version. Since we can't actually duplicate the stream, // we'll read into memory first, then use a string reader // in both cases. var rawData = reader.ReadToEnd(); var versionNumber = GetVersionNumber(new StringReader(rawData)); var stringReader = new StringReader(rawData); return(new Data( versionNumber switch { VersionNumber.v0_1 => DataStructures.Update( Deserialize <V0_1.Data>(stringReader) ), VersionNumber.v0_2 => Deserialize <V0_2.Data>(stringReader), _ => throw new System.InvalidOperationException( "Unrecognized Broombridge version number." ) }