xso: add support for overriding names of generated types
In 1265f4b, we introduced a change which may cause a conflict of type
names when deriving the traits on two different types. While a
workaround existed (use `mod`s to isolate the implementation), that is
ugly.
This commit allows overriding the choice of type names.
This commit is contained in:
parent
eb51b05c13
commit
c90752aa51
5 changed files with 77 additions and 12 deletions
|
|
@ -35,6 +35,7 @@ such:
|
|||
is also a path.
|
||||
- *string literal*: A string literal, like `"hello world!"`.
|
||||
- *type*: A Rust type.
|
||||
- *ident*: A Rust identifier.
|
||||
- flag: Has no value. The key's mere presence has relevance and it must not be
|
||||
followed by a `=` sign.
|
||||
|
||||
|
|
@ -46,6 +47,8 @@ The following keys are defined on structs:
|
|||
| --- | --- | --- |
|
||||
| `namespace` | *string literal* or *path* | The XML element namespace to match. If it is a *path*, it must point at a `&'static str`. |
|
||||
| `name` | *string literal* or *path* | The XML element name to match. If it is a *path*, it must point at a `&'static NcNameStr`. |
|
||||
| `builder` | optional *ident* | The name to use for the generated builder type. |
|
||||
| `iterator` | optional *ident* | The name to use for the generated iterator type. |
|
||||
|
||||
Note that the `name` value must be a valid XML element name, without colons.
|
||||
The namespace prefix, if any, is assigned automatically at serialisation time
|
||||
|
|
@ -58,6 +61,17 @@ and cannot be overridden. The following will thus not compile:
|
|||
struct Foo;
|
||||
```
|
||||
|
||||
If `builder` or `iterator` are given, the respective generated types will use
|
||||
the given names instead of names chosen by the derive macro implementation.
|
||||
Helper types will use these names as prefix. The exact names of helper types
|
||||
are implementation defined, which is why any type name starting with the
|
||||
identifiers passed to either of these keys is considered reserved.
|
||||
|
||||
By default, the builder type uses the type's name suffixed with
|
||||
`FromXmlBuilder` and the iterator type uses the type's name suffixed with
|
||||
`AsXmlIterator`. If the target type has any trailing underscores, they are
|
||||
removed before making the type name.
|
||||
|
||||
### Field meta
|
||||
|
||||
For fields, the *meta* consists of a nested meta inside the `#[xml(..)]` meta,
|
||||
|
|
|
|||
Loading…
Reference in a new issue