From d724507458c74dc8c16c428aba5edfee6940ddfb Mon Sep 17 00:00:00 2001 From: Sunli Date: Fri, 17 Sep 2021 09:02:09 +0800 Subject: [PATCH] Implement GraphQL enum to Value conversion. #617 --- derive/src/enum.rs | 6 ++++++ tests/error_ext.rs | 11 ++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/derive/src/enum.rs b/derive/src/enum.rs index d3bfc185..40432691 100644 --- a/derive/src/enum.rs +++ b/derive/src/enum.rs @@ -167,6 +167,12 @@ pub fn generate(enum_args: &args::Enum) -> GeneratorResult { } } + impl From<#ident> for #crate_name::Value { + fn from(value: #ident) -> #crate_name::Value { + #crate_name::resolver_utils::enum_value(value) + } + } + #remote_conversion }; Ok(expanded.into()) diff --git a/tests/error_ext.rs b/tests/error_ext.rs index b26c4fc6..6214b08d 100644 --- a/tests/error_ext.rs +++ b/tests/error_ext.rs @@ -2,6 +2,13 @@ use async_graphql::*; #[tokio::test] pub async fn test_error_extensions() { + #[derive(Enum, Eq, PartialEq, Copy, Clone)] + enum MyEnum { + Create, + Delete, + Update, + } + struct Query; #[Object] @@ -10,6 +17,7 @@ pub async fn test_error_extensions() { Err("my error".extend_with(|err, e| { e.set("msg", err.to_string()); e.set("code", 100); + e.set("action", MyEnum::Create) })) } @@ -40,7 +48,8 @@ pub async fn test_error_extensions() { "path": ["extendErr"], "extensions": { "msg": "my error", - "code": 100 + "code": 100, + "action": "CREATE", } }] })