diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py index ed70d7a1ecb..a161dbc54ee 100644 --- a/src/components/script/dom/bindings/codegen/CodegenRust.py +++ b/src/components/script/dom/bindings/codegen/CodegenRust.py @@ -4119,7 +4119,9 @@ class CGDictionary(CGThing): return "/* uh oh */ %s" % name def getMemberType(self, memberInfo): - _, (_, _, declType, _) = memberInfo + member, (_, _, declType, _) = memberInfo + if not member.defaultValue: + declType = CGWrapper(declType, pre="Option<", post=">") return declType.define() def getMemberConversion(self, memberInfo): @@ -4127,12 +4129,14 @@ class CGDictionary(CGThing): return CGIndenter(CGGeneric(s), 8).define() member, (templateBody, default, declType, _) = memberInfo - if not member.defaultValue: - raise TypeError("We don't support dictionary members without a " - "default value.") - replacements = { "val": "value" } conversion = string.Template(templateBody).substitute(replacements) + + assert (member.defaultValue is None) == (default is None) + if not default: + default = "None" + conversion = "Some(%s)" % conversion + conversion = ( "match get_dictionary_property(cx, object, \"%s\") {\n" " Err(()) => return Err(()),\n" diff --git a/src/components/script/dom/webidls/TestBinding.webidl b/src/components/script/dom/webidls/TestBinding.webidl index 578a2d3948b..e2e45b03c83 100644 --- a/src/components/script/dom/webidls/TestBinding.webidl +++ b/src/components/script/dom/webidls/TestBinding.webidl @@ -4,23 +4,23 @@ enum TestEnum { "", "foo", "bar" }; -/* dictionary TestDictionary { - // boolean booleanValue; - // byte byteValue; - // octet octetValue; - // short shortValue; - // unsigned short unsignedShortValue; - // long longValue; - // unsigned long unsignedLongValue; - // long long longLongValue; - // unsigned long long unsignedLongLongValue; - // float floatValue; - // double doubleValue; - // DOMString stringValue; - // TestEnum enumValue; - // Blob interfaceValue; - // any anyValue; -}; */ +dictionary TestDictionary { + boolean booleanValue; + byte byteValue; + octet octetValue; + short shortValue; + unsigned short unsignedShortValue; + long longValue; + unsigned long unsignedLongValue; + long long longLongValue; + unsigned long long unsignedLongLongValue; + float floatValue; + double doubleValue; + DOMString stringValue; + TestEnum enumValue; + Blob interfaceValue; + any anyValue; +}; dictionary TestDictionaryDefaults { boolean booleanValue = false;