private static TaxiTripEntry SingleFromBinary(BinaryReader binaryReader) { var pickupLongtitude = binaryReader.ReadSingle(); var pickupLatitude = binaryReader.ReadSingle(); var dropoffLongtitude = binaryReader.ReadSingle(); var dropoffLatitude = binaryReader.ReadSingle(); var numOfPassangers = binaryReader.ReadInt32(); var pickupTime = DateTime.FromBinary(binaryReader.ReadInt64()); var dropoffTime = DateTime.FromBinary(binaryReader.ReadInt64()); var paymentType = PaymentTypeUtils.FromBinary(binaryReader.ReadByte()).ValueUnsafe; var taxiVendor = TaxiVendorUtils.FromBinary(binaryReader.ReadByte()).ValueUnsafe; var tripDistance = binaryReader.ReadSingle(); var tripTime = binaryReader.ReadSingle(); var tip = binaryReader.ReadSingle(); var fareAmount = binaryReader.ReadSingle(); var totalPayment = binaryReader.ReadSingle(); return(new TaxiTripEntry(pickupLongtitude, pickupLatitude, dropoffLongtitude, dropoffLatitude, numOfPassangers, pickupTime, dropoffTime, paymentType, taxiVendor, tripDistance, tripTime, tip, fareAmount, totalPayment)); }
public static Maybe <TaxiTripEntry> TryParse(string tripDataCsvLine, string tripFareCsvLine) { var dataTokens = tripDataCsvLine.SplitCsv(); var fareTokens = tripFareCsvLine.SplitCsv(); return ((dataTokens.Length == 14) .BindMaybe(() => (fareTokens.Length == 11) .BindMaybe(() => dataTokens[0].Equals(fareTokens[0]) .BindMaybe(() => TaxiVendorUtils.TryParse(dataTokens[2]) .Bind(vendor => dataTokens[5].TryParseDateTime() .Bind(pickupDateTime => dataTokens[6].TryParseDateTime() .Bind(dropoffDateTime => dataTokens[7].TryParseInt() .Bind(passengerCount => dataTokens[8].TryParseFloat() .Bind(tripTime => dataTokens[9].TryParseFloat() .Bind(tripDistance => dataTokens[10].TryParseFloat() .Bind(pickupLongtitude => dataTokens[11].TryParseFloat() .Bind(pickupLatitude => dataTokens[12].TryParseFloat() .Bind(dropoffLongtitude => dataTokens[13].TryParseFloat() .Bind(dropoffLatitude => pickupLongtitude.InRange(-75f, -70f) .BindMaybe(() => dropoffLongtitude.InRange(-75f, -70f) .BindMaybe(() => pickupLatitude.InRange(35f, 45f) .BindMaybe(() => dropoffLatitude.InRange(35f, 45f) .BindMaybe(() => PaymentTypeUtils.TryParse(fareTokens[4]) .Bind(paymentType => fareTokens[5].TryParseFloat() .Bind(fareAmount => fareTokens[8].TryParseFloat() .Bind(tipAmount => fareTokens[10].TryParseFloat() .Map(totalAmount => new TaxiTripEntry(pickupLongtitude, pickupLatitude, dropoffLongtitude, dropoffLatitude, passengerCount, pickupDateTime, dropoffDateTime, paymentType, vendor, tripDistance, tripTime, tipAmount, fareAmount, totalAmount))))))))))))))))))))))); }