aboutsummaryrefslogtreecommitdiff
path: root/crates/tor-netdoc/src/parse2/derive.rs
Commit message (Collapse)AuthorAgeFilesLines
...
* netdoc parse2: NetdocParseableFields: suppress errors for empty typesIan Jackson2025-09-291-2/+10
|
* netdoc parse2: support `with` for rest arguemnts, and testIan Jackson2025-09-291-2/+5
|
* netdoc parse2: support `with` for normal arguemnts, and testIan Jackson2025-09-291-2/+5
|
* netdoc parse2: ArgumentSetMethods: take a parser functionIan Jackson2025-09-291-1/+6
| | | | We need this to support `with`.
* netdoc parse2: Support with for Item parsingIan Jackson2025-09-291-2/+23
| | | | Tests will come in a moment.
* netdoc parse2: New single_item attributeIan Jackson2025-09-291-2/+24
| | | | | | Many of the existing netdoc structs have items that are just the single argument. We don't want to turn them all into singleton tuples. Provide a macro feature for this instead.
* netdoc parse2: Break out ITEM_VALUE_FROM_UNPARSEDIan Jackson2025-09-291-2/+6
| | | | This is going to get more complicated.
* netdoc parse2: NetdocParseableFields: Fix default, and testIan Jackson2025-09-291-2/+6
|
* netdoc parse2: NetdocParseableFields: introduce use of $fpatnameIan Jackson2025-09-291-5/+4
| | | | We're going to want to do more complex things here.
* netdoc parse2: Run selector-based trait check for intro item tooIan Jackson2025-09-291-2/+6
|
* netdoc parse2: Fix Object handlingIan Jackson2025-09-291-16/+44
| | | | | | | | | | Use the standard multiplicity technique rather than the ad-hoc impl on Option. This allows us to support an ad-hoc parsing function for a field that's `Option`. Disentangle the `label` field attribute, which did both setting the label, and expecting a different parsing approach: replace it with `with`.
* netdoc parse2: Fix "rest" item arguments, and testIan Jackson2025-09-291-3/+12
| | | | | The previous code didn't compile at all, and this went unnoticed because it wasn't used by the poc.
* netdoc parse2: Actually use ArgumentSetSelector, and testIan Jackson2025-09-291-3/+4
| | | | Without this, parsing of Option and Vec argument fields doesn't work.
* netdoc parse2: Fix typo in todo commentIan Jackson2025-09-291-1/+1
|
* netdoc parse2: Use $P::Result throughoutIan Jackson2025-09-291-5/+5
| | | | | This is needed when using these macros in a namespace with a local redefinition of `Result`.
* netdoc parse2: Fix a compile_error! invocationIan Jackson2025-09-291-1/+1
| | | | I triggered this error and it didn't work right.
* Produce better error messages from bad field types (fmt)Ian Jackson2025-09-021-1/+1
| | | | Worsify formatting as demanded by rustfmt.
* Produce better error messages from bad field typesIan Jackson2025-09-021-0/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | With this change, this diff > --- a/crates/tor-netdoc/src/parse2/poc/netstatus.rs > +++ b/crates/tor-netdoc/src/parse2/poc/netstatus.rs > @@ -24,5 +24,4 @@ pub enum NdaNetworkStatusVersion { > /// `params` value > #[derive(Clone, Debug, Default, Deftly)] > -#[derive_deftly(ItemValueParseable)] > #[non_exhaustive] > pub struct NdiParams { gives the errors below. So the first reported error points to the errant field, albeit with the slightly mendacious phrasing "this call". Previously there was only the 2nd message. Disagnosing that requires hunting through the document struct looking for fields of the right type, which can be seriously awkward when there are type aliases involved as there often are in tor-netdoc. > error[E0277]: the trait bound `parse2::poc::netstatus::NdiParams: parse2::traits::ItemValueParseable` is not satisfied > --> crates/tor-netdoc/src/parse2/poc/netstatus/flavoured.rs:27:10 > | > 27 | #[derive(Deftly, Clone, Debug)] > | ^^^^^^ the trait `parse2::traits::ItemValueParseable` is not implemented for `parse2::poc::netstatus::NdiParams` > ... > 55 | pub params: NdiParams, > | ------ required by a bound introduced by this call > | > = help: the following other types implement trait `parse2::traits::ItemValueParseable`: > () > (T0, T1) > (T0, T1, T2) > (T0, T1, T2, T3) > (T0, T1, T2, T3, T4) > (T0, T1, T2, T3, T4, T5) > (T0, T1, T2, T3, T4, T5, T6) > (T0, T1, T2, T3, T4, T5, T6, T7) > and 16 others > note: required by a bound in `parse2::multiplicity::ItemSetMethods::check_item_value_parseable` > --> crates/tor-netdoc/src/parse2/multiplicity.rs:109:59 > | > 109 | fn check_item_value_parseable(self) where Self::Each: ItemValueParseable {} > | ^^^^^^^^^^^^^^^^^^ required by this bound in `ItemSetMethods::check_item_value_parseable` > > error[E0277]: the trait bound `parse2::poc::netstatus::NdiParams: parse2::traits::ItemValueParseable` is not satisfied > --> crates/tor-netdoc/src/parse2/derive.rs:438:34 > | > 438 | let item = ItemValueParseable::from_unparsed(item)?; > | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `parse2::traits::ItemValueParseable` is not implemented for `parse2::poc::netstatus::NdiParams` > | > ::: crates/tor-netdoc/src/parse2/poc/netstatus/flavoured.rs:27:10 > | > 27 | #[derive(Deftly, Clone, Debug)] > | ------ in this derive macro expansion > | > = help: the following other types implement trait `parse2::traits::ItemValueParseable`: > () > (T0, T1) > (T0, T1, T2) > (T0, T1, T2, T3) > (T0, T1, T2, T3, T4) > (T0, T1, T2, T3, T4, T5) > (T0, T1, T2, T3, T4, T5, T6) > (T0, T1, T2, T3, T4, T5, T6, T7) > and 16 others > = note: this error originates in the macro `derive_deftly_template_NetdocParseable` which comes from the expansion of the derive macro `Deftly` (in Nightly builds, run with -Z macro-backtrace for more info)
* tor-netdoc: parse2: Bind a `selector` localIan Jackson2025-09-021-1/+2
| | | | We're going to reuse this.
* tor-netdoc: parse2: derive: Remove an unneeded nested ${concat }Ian Jackson2025-09-021-1/+1
| | | | As per https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3186#note_3249820
* tor-netdoc: parse2: Speak of non-structural *items* rather than fieldsIan Jackson2025-09-021-1/+1
|
* tor-netdoc: parse2: Report unexpected subdoc multiplicity at the intro itemIan Jackson2025-09-021-0/+2
|
* tor-netdoc: parse2: Provide flattening and NetdocParseableFieldsIan Jackson2025-09-021-6/+120
|
* tor-netdoc: parse2: Preparatory rework for flatteningIan Jackson2025-09-021-8/+10
| | | | | Change from two loops over fields and two ${when}, to one loop with ${select1}. There will be another arm in a moment.
* tor-netdoc: parse2: Specify `for struct` in one of the derivesIan Jackson2025-09-021-1/+1
| | | | None of these things support enums or unions.
* tor-netdoc: parse2: Know that we always accumulate into Option<Field>Ian Jackson2025-08-261-1/+1
|
* tor-netdoc: parse2: Break out F_EFFECTIVE_TYPEIan Jackson2025-08-261-7/+13
| | | | We're going to want to reuse this.
* tor-netdoc: parse2: Use selector_ rather than open-codingIan Jackson2025-08-261-1/+1
| | | | We're going to make this depend on $ftype differently.
* tor-netdoc: parse2: Report subdoc intro item keyword for missing itemIan Jackson2025-08-261-2/+8
| | | | This corrects the error message.
* tor-netdoc: parse2: Fix doctype_for_errorIan Jackson2025-08-261-3/+4
| | | | Actually report the intro item, as the docs state.
* tor-netdoc: Introduce parse2, new parserIan Jackson2025-08-141-0/+701
This isn't used anywhere yet. We're going to demonstrate it, and test the demo, in a moment.