# Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#
# This def file should test most aspects of def files that makes a difference
# for the autogenerated config classes. The goal is to trigger all blocks of
# code in the code generators. This includes:
#
# - Use all legal special characters in the def file name, to ensure that those
#   that needs to be replaced in type names are actually replaced.
# - Use the same enum type twice to verify that we dont declare or define it
#   twice.
# - Use the same struct type twice for the same reason.
# - Include arrays of primitives and structs.
# - Include enum primitives and array of enums. Arrays of enums must be handled
#   specially by the C++ code.
# - Include enums both with and without default values.
# - Include primitive string, numbers & doubles both with and without default
#   values.
# - Have an array within a struct, to verify that we correctly recurse.
# - Reuse type name further within to ensure that this works.

namespace=test

# Some random bool without a default value. These comments exist to check
 # that comment parsing works.
bool_val bool restart
 ## A bool with a default value set.
bool_with_def bool default=false restart
# An int value
# Also test that multiline comments
# work.
int_val int restart
int_with_def int default=-545 restart
long_val long restart
long_with_def long default=-50000000000 restart
double_val double restart
double_with_def double default=-6.43 restart
# Another comment
string_val string restart
stringwithdef string default="foobar" restart
enum_val enum { FOO, BAR, FOOBAR } restart
enumwithdef enum { FOO2, BAR2, FOOBAR2 } default=BAR2 restart
onechoice enum { ONLYFOO } default=ONLYFOO restart
refval reference restart
refwithdef reference default=":parent:" restart
fileVal file restart
pathVal path restart
urlVal url

boolarr[] bool restart
intarr[] int restart
longarr[] long restart
doublearr[] double restart
stringarr[] string restart
enumarr[] enum { ARRAY, VALUES } restart
refarr[] reference restart
fileArr[] file restart
pathArr[] path restart
urlArr[] url

#This is a map of ints.
intMap{} int restart
stringMap{} string restart
filemap{} file restart
pathMap{} path restart
urlMap{} url

# A basic struct
basicStruct.foo string default="basic" restart
basicStruct.bar int restart
basicStruct.intArr[] int restart

# A struct of struct
rootStruct.inner0.name string default="inner0" restart
rootStruct.inner0.index int restart
rootStruct.inner1.name string default="inner1" restart
rootStruct.inner1.index int restart
rootStruct.innerArr[].boolVal bool default=false restart
rootStruct.innerArr[].stringVal string restart

# This is my array
myarray[].intval int default=14 restart
myarray[].stringval[] string restart
myarray[].enumval enum { INNER, ENUM, TYPE } default=TYPE restart
myarray[].refval reference # Value in array without default restart
myarray[].fileVal file restart
myarray[].urlVal url
myarray[].anotherarray[].foo int default=-4 restart
myarray[].myStruct.a int restart
myarray[].myStruct.b int default=2 restart

myStructMap{}.myInt int restart
myStructMap{}.myString string restart
myStructMap{}.myIntDef int default=56 restart
myStructMap{}.myStringDef string default="g" restart
myStructMap{}.anotherMap{}.anInt int restart
myStructMap{}.anotherMap{}.anIntDef int default=11 restart
