Implement Transferable for anything that is Serialize + Deserialize #320
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Anything that is Serialize + Deserialize<'de> will implement Transferable. Implementing Transferable will mark the struct or enum as a valid agent input or output type.
I think either this or #319 should be merged, as either broadens the set of types that can be sent between Agents and the rest of an application. Either of these PRs should allow types defined in other crates to be be
Agent::Input
orAgent::Output
as long as they implement the Serde traits without having to "newtype" them. This allows()
to beInput
orOutput
, which is nicer than having to define aVoid
empty-struct that implements Transferable to represent the same thing.The particular drawback of this change is that if you have a type that should not be an agent input or output, but is
Serialize + Deserialize<'de>
, it would be allowed as anInput
orOutput
. As far as I'm aware, things that shouldn't be sent (like tasks) don't implement the Serde traits, so this wouldn't allow any behavior that is currently prohibited for safety reasons. Going on, the inability to implementSerialize + Deserialize<'de>
for non-agent-message-same types would remain as a design constraint.