summaryrefslogtreecommitdiff
path: root/crates/tor-rpcbase/src
Commit message (Collapse)AuthorAgeFilesLines
* tor-rpcbase: Add a missing `#[doc(hidden)]`Ian Jackson2024-04-291-0/+1
| | | | | | | As per https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/2103#note_3024372 I overlooked this.
* tor-rpcbase: invoker_ent!: simplify argument parsingIan Jackson2024-04-251-12/+15
| | | | | | Previously, one of the macros was documented to accept `(function_expr)`, but in fact it would only accept an identifier. Now we *do* accept any expression.
* tor-rpcbase: invoker_ent!: abolish flags argumentIan Jackson2024-04-251-19/+9
| | | | | | | | IMO if we want flags again in the future, we should probably pick a syntax that doesn't involve such awkward patterns. Perhaps `$expr $( , $( $flag )* )?`. But I think we probably won't need that feature.
* tor-rpcbase: invoker_ent: Infer the correct fn type for castIan Jackson2024-04-251-7/+69
| | | | | This renders the Update flag redundant. Indeed, in this commit we mow ignore the flags.
* tor-rpcbase: invoker_ent!: remove buggy unuseable armIan Jackson2024-04-251-3/+0
| | | | | | | | | This arm puts parens around its argument. But the other arm insists on $func:ident, and also would capture any reasonable input. This was probably something to do with the (func_expr) syntax. We don't need to *fix* this macrology, because in a moment the whole macro can be made to take $func:expr.
* rpc: add a comment from diziet to explain why we need same_declNick Mathewson2024-04-221-0/+6
|
* rpc: reformat macro slightly.Nick Mathewson2024-04-221-2/+5
|
* Rename Invoker trait to Invocable.Nick Mathewson2024-04-221-15/+15
|
* Fix rustdoc links.Nick Mathewson2024-04-221-2/+2
|
* Adjust an allow.Nick Mathewson2024-04-221-1/+1
|
* rpc:Sketch out the syntax of our remaining tricky macrosNick Mathewson2024-04-221-2/+8
|
* RPC: Remove installable_rpc_invoke_fnNick Mathewson2024-04-221-128/+68
| | | | | | | | | | | | | | | Now that we've done more refactoring, it's no longer necessary to have this machinery, since: * We can support statically registering instantiated methods, if we know them ahead of time. * Writing an installer function is pretty simple, and the syntax is much nicer than the special-purpose junk we had before. I've added examples of both approaches. While we're at it, I've simplified the syntax for `invoker_ent!` a little, since the parentheses I had before aren't necessary.
* RPC: Remove method and object type from macros.Nick Mathewson2024-04-221-20/+18
| | | | | These are no longer needed, since they are inferred from the types of the functions.
* rpc: Revise backend for dispatchable-object macro.Nick Mathewson2024-04-225-260/+261
| | | | | | | | | The trick here is to provide an `Invoker` trait, with blanket implementations for appropriate `fn(_,_,_,_?) -> _`. With this trick, we no longer need to have a `decl_rpc_invoke_fn`. This lets us discard HasConstTypeId entirely, and will let us simplify some other syntax moving forward.
* Add TODO RPC items from review.Nick Mathewson2024-04-112-0/+9
|
* Fix a comment.Nick Mathewson2024-04-111-2/+1
|
* rpc: Add a missing not() to generic test.Nick Mathewson2024-04-111-1/+1
|
* Remove a duplicate $twheres.Nick Mathewson2024-04-111-1/+1
|
* rpc: Adjust a TODO comment.Nick Mathewson2024-04-111-1/+1
|
* rpc: Move deftly attributes into an `rpc` namespace.Nick Mathewson2024-04-114-18/+18
|
* Add generic support for RPC objects.Nick Mathewson2024-04-081-8/+200
| | | | | | | | | Since we can't enumerate every instantiation at compile time, we instead provide a macro to generate an _installer_ function that installs a set of functions for a given instantiation. Due to the limitations of macro_rules, the syntax for generics is a bit ugly.
* Refactor invoke_fn macro to make inventory optionalNick Mathewson2024-04-081-14/+19
| | | | | Now there is an `decl_rpc_invoke_fn` macro that *only* declares the type-erased functions. Another macro's job will be to register it.
* Globally rename rpc_invoke_fn to static_rpc_invoke_fnNick Mathewson2024-04-081-11/+11
| | | | | | | | This will be called _static_ to make it clear that it registers the method statically, so you don't need to install it at runtime. After a bit more work, there will be a separate macro that declares an installer function.
* Refactor: remove existence of HasConstTypeId_ as a traitNick Mathewson2024-04-085-49/+48
| | | | | | | | | We don't actually need this to be a trait; we just need methods and objects to have a `CONST_TYPE_ID_` if they want to participate in the inventory-based method registry. Removing this trait makes it much simpler to declare methods and objects.
* Port many of the macros in tor-rpcbase to use derive-deftly.Nick Mathewson2024-04-046-197/+206
| | | | | | This simplifies our implementation logic in a few places, and simplifies our invocation syntax greatly. There are a few infelicities, noted in `TODO RPC` comments.
* rpcbase: Require that every Object is Send + Sync + 'staticNick Mathewson2024-04-041-2/+2
| | | | | (We don't plan to have any Object that can't be used as an `Arc<dyn Object>`.)
* Run maint/add_warning.Nick Mathewson2024-03-135-0/+5
|
* Fix typos in doc commentsTobias Stoeckmann2024-03-061-1/+1
|
* deny clippy::unchecked_duration_subtractiontrinity-1686a2024-02-291-0/+1
|
* tor-rpcbase: Add an allowIan Jackson2024-01-311-0/+1
|
* Run maint/add_warning to add lint block everywhereIan Jackson2023-08-235-0/+5
|
* Run add_warnings on all files.Nick Mathewson2023-08-041-2/+2
|
* Fix typosDimitris Apostolou2023-07-221-1/+1
|
* Run maint/add_warning to actually apply new lint allowsIan Jackson2023-07-106-0/+6
|
* Run add_warning to remove `missing_panics_doc` deny.Nick Mathewson2023-07-061-1/+0
| | | | Closes #950.
* lints: Run maint/add_warning to actually apply new lintsIan Jackson2023-06-211-0/+2
|
* Merge branch 'rpcdoc' into 'main'Ian Jackson2023-06-201-0/+2
|\ | | | | | | | | rpc: Minor docs improvements See merge request tpo/core/arti!1260
| * rpc: Cross-reference up from tor-rpcbase re where DispatchTable livesIan Jackson2023-06-161-0/+2
| |
* | rpc: Remove some verbiage about 'static, and demo that it's OK withoutIan Jackson2023-06-151-7/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | It's now not actually possible to write code that doesn't work, even if `Tr` *isn't* 'static, because of the bounds on `CastTable::insert`. I tried to produce a non-working setup with a non-static `Simple`, but you can't implement `Object` for such a thing. Removing 'static from Object would stop the downcasts from Any to Object working. Prior to the new typesafe insert, this change - let f: fn(&dyn $crate::Object) -> &(dyn $traitname + 'static) = |self_| { + let f: fn(&dyn $crate::Object) -> &(dyn $traitname) = |self_| { would result in a runtime crash. Now it results in a compiler error.
* | rpc: Give the name `O` to "the type associated with this CastTable"Ian Jackson2023-06-151-8/+12
| | | | | | | | | | | | | | This was locally bound to `S` in one place. Bind and use it throughout. Since this is an RPC object, `O` is a better name. In each item, use the description once and thereafter just the name.
* | rpc: Add Simple test case for CastTableIan Jackson2023-06-151-3/+20
| |
* | rpc: Move boxing from macro to CastTable::insert (formatting)Ian Jackson2023-06-151-3/+1
| |
* | rpc: Move boxing from macro to CastTable::insertIan Jackson2023-06-151-4/+4
| |
* | rpc: Make CastTable::insert be more type-safeIan Jackson2023-06-151-6/+21
|/ | | | This checks the Requirements.
* RPC: Functionality to downcast dyn Object to a dyn Trait.Nick Mathewson2023-06-124-14/+510
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This is a rather tricky piece of functionality. It works as follows. We introduce a `CastTable` type. Each `CastTable` tells us how to downcast `dyn Object` for objects of a single concrete type. The `Object` type now has a `get_casttable` method that returns an empty `CastTable` by default. `CastTable` is, internally, a map from the `TypeId` of the target dyn Trait reference type to a function `fn(&dyn Object) -> &dyn Trait`. These functions are stored as `Box<dyn Any + ...>`. (They are Boxed because they may refer to generic functions, which you can't get a static reference to, and they're Any because the functions have different types.) The `decl_object!` macro now implements `get_casttable` as appropriate. (The syntax is a bit janky, but that's what we get for not using derive_adhoc.) For non-generic types, `get_casttable` uses a Lazy<CastTable>`. to initialize a CastTable exactly once. For generic types, it use a `Lazy<RwLock<HashMap<..>>` to build one CastTable per instantiation of the generic type. This could probably be optimized a bit more, the yaks could be shaved in a more scintillating hairstyle, and the syntax for generic `decl_object` could definitely be improved.
* rpc: make decl_object! responsible for writing impl Object {} blocks.Nick Mathewson2023-06-072-4/+1
|
* RPC: Let objects declare that they need a GlobalId.Nick Mathewson2023-06-051-1/+17
|
* rpc: Remove downgrade_owned for nowNick Mathewson2023-05-242-15/+0
| | | | | | | Rationale: Our weak-vs-strong design is a bit confused at the moment due to concerns about deduplication and capability semantics. It's not clear that a general "change strong to weak" method is compatible with what we want to provide.
* rpc: Implement functionality to remove objects from a sessionNick Mathewson2023-05-242-0/+36
| | | | | | | | | | | I've made doing some design choices here: * Reserving "rpc" as a prefix for post-authentication functionality that is not arti-specific. * Declaring these to be methods on the session rather than methods on the objects themselves. There's a problem with defining an API to drop a weak reference; see comment in code.
* rpc: fix documentation for methods in Context.Nick Mathewson2023-05-241-6/+4
|