public object Read(IPackStreamReader reader, byte signature, long size) { switch (signature) { case Point2DStructType: { PackStream.EnsureStructSize("Point2D", Point2DStructSize, size); var srId = reader.ReadInteger(); var x = reader.ReadDouble(); var y = reader.ReadDouble(); return(new CypherPoint(srId, x, y)); } case Point3DStructType: { PackStream.EnsureStructSize("Point3D", Point3DStructSize, size); var srId = reader.ReadInteger(); var x = reader.ReadDouble(); var y = reader.ReadDouble(); var z = reader.ReadDouble(); return(new CypherPoint(srId, x, y, z)); } default: throw new ProtocolException( $"Unsupported struct signature {signature} passed to {nameof(PointHandler)}!"); } }