| /** |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * https://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| /** |
| * A simple test case. |
| */ |
| @version("1.0.5") |
| @namespace("org.apache.avro.test") |
| protocol Simple { |
| /** A kind of record. */ |
| @aliases(["org.foo.KindOf"]) |
| enum Kind { |
| FOO, |
| BAR, // the bar enum value |
| BAZ |
| } |
| |
| enum Status { |
| A, |
| B, |
| C |
| } = C; // C is the default value used when reading unknown values from another schema version (without it, reading throws an exception). |
| |
| /** A TestRecord. */ |
| @my-property({"key":3}) |
| record TestRecord { |
| // Tests that keywords can also appear in identifiers. |
| @avro.java.`string`("String") string @order("ignore") name = "foo"; |
| |
| /** The kind of record. */ |
| Kind @order("descending") kind; |
| |
| /** The status of the record. */ |
| Status status = "A"; |
| |
| MD5 hash = "0000000000000000"; |
| |
| // A traditional optional field |
| union {null, MD5} @aliases(["hash", "hsh"]) nullableHash = null; |
| |
| // These two fields parse correctly, but will brewak (be changed to strings) when serializing the protocol/schema as JSON. |
| double value = NaN; |
| float average = -Infinity; |
| date d = 0; |
| // An optional type with a non-null default value (results in a union with null last). |
| time_ms? t = 0; |
| |
| @foo.bar("bar.foo") long l = 0; |
| // Arrays (and maps) may also have properties |
| @foo.bar.bar("foo.bar2") array<string> a = []; |
| // An optional type with a null default value (results in a union with null first). |
| @foo.foo.bar(42) @foo.foo.foo("3foo") string? prop = null; |
| } |
| |
| /** An MD5 hash. */ |
| fixed MD5(16); |
| |
| error TestError { |
| string message; |
| } |
| |
| /** method 'hello' takes @parameter 'greeting' */ |
| string hello(string greeting); |
| // The value of TestRecord also contains defaults for fields not mentioned. |
| TestRecord echo(TestRecord `record` = {"name":"bar","kind":"BAR"}); |
| /** method 'add' takes @parameter 'arg1' @parameter 'arg2' */ |
| @specialProp("test") |
| int add(int arg1, int arg2 = 0); |
| bytes echoBytes(bytes data); |
| void `error`() throws TestError; |
| void ping() oneway; |
| } |