function protobufToDatum(pb\Datum $datum) { switch ($datum->getType()) { case pb\Datum_DatumType::PB_R_NULL: return NullDatum::_fromProtobuffer($datum); case pb\Datum_DatumType::PB_R_BOOL: return BoolDatum::_fromProtobuffer($datum); case pb\Datum_DatumType::PB_R_NUM: return NumberDatum::_fromProtobuffer($datum); case pb\Datum_DatumType::PB_R_STR: return StringDatum::_fromProtobuffer($datum); case pb\Datum_DatumType::PB_R_ARRAY: return ArrayDatum::_fromProtobuffer($datum); case pb\Datum_DatumType::PB_R_OBJECT: return ObjectDatum::_fromProtobuffer($datum); default: throw new RqlDriverError("Unhandled datum type " . $datum->getType()); } }