The problem is BRecord can be 0 or more and you still end up with the a valid B.
How about
{
"name" : "ARecord",
"type" : "record",
"namespace" : "A",
"fields" : [
{"name": "id", "type": "string" },
{
"name": "BRecord",
"type": "record",
"fields": [
{ "name": "B", "type": "string" },
{ "name": "C", "type": "string" }
]
}
}
]
}
This gives me 0 or more ARecords, each with and id, and 0 or more BRecords
associated with each ARecord each with a B and C. If you wanted one or more
C's I don't see a trivial clean way to do that (you could add a
Cextras array to the
BRecord to get 0 or more additional C things, but that feels unclean.)
On Mon, Nov 27, 2017 at 9:10 AM, Martin Mucha <[email protected]> wrote:
> Thanks for reply.
>
> Sadly it does not work that way (here). Even:
>
> {
> "name" : "ARecord",
> "type" : "record",
> "namespace" : "A",
> "fields" : [
> {"name": "id", "type": "string" },
> {
> "name": "B",
> "type": {
> "type": "record",
> "name": "BRecord",
> "fields": [
> {
> "name": "C",
> "type": "string"
> }
> ]
> }
> }
> ]
> }
>
> does not require C. And that's not what I want ... I'd like optional B, and
> once user provide B, then B.C is required.
>
> Martin.
>
>
> 2017-11-27 15:06 GMT+01:00 Dan Schmitt <[email protected]>:
>>
>> "name": "B",
>> "type": ["null", {
>>
>> The [] union lets you do null or a BRecord, your JSON does null.
>> Pull the null from the union and it will require the C.
>>
>> On Mon, Nov 27, 2017 at 9:00 AM, Martin Mucha <[email protected]> wrote:
>> > Hi,
>> >
>> > I have this avro schema:
>> >
>> > {
>> > "name" : "ARecord",
>> > "type" : "record",
>> > "namespace" : "A",
>> > "fields" : [
>> > {"name": "id", "type": "string" },
>> > {
>> > "name": "B",
>> > "type": ["null", {
>> > "type": "record",
>> > "name": "BRecord",
>> > "fields": [
>> > {
>> > "name": "C",
>> > "type": "string"
>> > }
>> > ]
>> > }]
>> > }
>> > ]
>> > }
>> >
>> >
>> > and following JSON, which validates against it:
>> >
>> > {
>> > "id": "...",
>> > "B": {
>> >
>> > }
>> > }
>> >
>> >
>> > I would expect, that C is required. Why it's not? What shall I do to
>> > make it
>> > required?
>> >
>> > Thanks!
>> > Martin.
>
>