diff --git a/lib/avro/datum.php b/lib/avro/datum.php index 8e74252..c4499e0 100644 --- a/lib/avro/datum.php +++ b/lib/avro/datum.php @@ -242,7 +242,7 @@ private function write_map($writers_schema, $datum, $encoder) $encoder->write_long($datum_count); foreach ($datum as $k => $v) { - $encoder->write_string($k); + $encoder->write_string((string) $k); $this->write_data($writers_schema->values(), $v, $encoder); } } diff --git a/lib/avro/schema.php b/lib/avro/schema.php index 89b0de0..745a973 100644 --- a/lib/avro/schema.php +++ b/lib/avro/schema.php @@ -446,7 +446,7 @@ public static function is_valid_datum($expected_schema, $datum) if (is_array($datum)) { foreach ($datum as $k => $v) - if (!is_string($k) + if ((!is_string($k) && !is_int($k)) || !self::is_valid_datum($expected_schema->values(), $v)) return false; return true; diff --git a/test/DatumIOTest.php b/test/DatumIOTest.php index c9018af..b6ac9aa 100644 --- a/test/DatumIOTest.php +++ b/test/DatumIOTest.php @@ -135,6 +135,9 @@ function data_provider() array('{"type":"map","values":"int"}', array('foo' => 1, 'bar' => 2, 'baz' => 3), "\x06\x06foo\x02\x06bar\x04\x06baz\x06\x00"), + array('{"type":"map","values":"int"}', + array('123' => 1, 456 => 2, 'foo' => 3), + "\x06\x06123\x02\x06456\x04\x06foo\x06\x00"), array('["null", "int"]', 1, "\x02\x02"), array('{"name":"fix","type":"fixed","size":3}', "\xAA\xBB\xCC", "\xAA\xBB\xCC"),