|
854 | 854 | tok = tokens{i}; |
855 | 855 |
|
856 | 856 | % Resolve $ref if present |
857 | | - while isa(subschema, 'containers.Map') && isKey(subschema, '$ref') |
858 | | - subschema = resolveref(subschema('$ref'), schema); |
859 | | - if isempty(subschema) |
860 | | - return |
| 857 | + if (isstruct(subschema)) |
| 858 | + while isfield(subschema, encodevarname('$ref')) |
| 859 | + subschema = resolveref(subschema.(encodevarname('$ref')), schema); |
| 860 | + if isempty(subschema) |
| 861 | + return |
| 862 | + end |
| 863 | + end |
| 864 | + else |
| 865 | + while isKey(subschema, '$ref') |
| 866 | + subschema = resolveref(subschema('$ref'), schema); |
| 867 | + if isempty(subschema) |
| 868 | + return |
| 869 | + end |
861 | 870 | end |
862 | 871 | end |
863 | 872 |
|
864 | 873 | if tok(1) == '[' |
865 | 874 | % Array index -> use items schema |
866 | | - if isa(subschema, 'containers.Map') && isKey(subschema, 'items') |
| 875 | + if isstruct(subschema) && isfield(subschema, 'items') |
| 876 | + subschema = subschema.items; |
| 877 | + if iscell(subschema) && ~isempty(subschema) |
| 878 | + subschema = subschema{1}; |
| 879 | + end |
| 880 | + elseif (isa(subschema, 'containers.Map') || isa(subschema, 'dictionary')) && isKey(subschema, 'items') |
867 | 881 | subschema = subschema('items'); |
868 | 882 | if iscell(subschema) && ~isempty(subschema) |
869 | 883 | subschema = subschema{1}; |
870 | 884 | end |
871 | 885 | else |
872 | 886 | subschema = []; |
873 | | - return |
874 | 887 | end |
875 | 888 | else |
876 | 889 | % Property name (unescape \.) |
877 | 890 | prop = strrep(tok, '\.', '.'); |
878 | | - if isa(subschema, 'containers.Map') && isKey(subschema, 'properties') |
| 891 | + if isstruct(subschema) && isfield(subschema, 'properties') |
| 892 | + props = subschema.properties; |
| 893 | + if isstruct(props) && isfield(props, prop) |
| 894 | + subschema = props.(prop); |
| 895 | + else |
| 896 | + subschema = []; |
| 897 | + end |
| 898 | + elseif (isa(subschema, 'containers.Map') || isa(subschema, 'dictionary')) && isKey(subschema, 'properties') |
879 | 899 | props = subschema('properties'); |
880 | | - if isa(props, 'containers.Map') && isKey(props, prop) |
| 900 | + if (isa(subschema, 'containers.Map') || isa(subschema, 'dictionary')) && isKey(props, prop) |
881 | 901 | subschema = props(prop); |
882 | 902 | else |
883 | 903 | subschema = []; |
884 | | - return |
885 | 904 | end |
886 | 905 | else |
887 | 906 | subschema = []; |
888 | | - return |
889 | 907 | end |
890 | 908 | end |
891 | 909 | end |
0 commit comments