我最近开始在我的 Android 应用程序中使用 Moshi,我很想知道更多关于注释的@JsonClass(generateAdapter = true) 真正作用。
示例数据类:
data class Person(
val name: String
)
Run Code Online (Sandbox Code Playgroud)
我可以按如下方式序列化/反序列化这个类:
val moshi: Moshi = Moshi.Builder().build()
moshi.adapter(Person::class.java).toJson(Person())
Run Code Online (Sandbox Code Playgroud)
我在这里没有使用 @JsonClass 注释,因此不会启动代码生成。
我的问题是,为什么以及何时需要使用 @JsonClass(generateAdapter = true)
我正在使用该@graphql-codegen/cli工具从我的 graphql 服务器中生成打字稿类型。这是我的codegen.yml内容:
overwrite: true
schema: "http://localhost:3001/graphql"
documents: "src/**/*.graphql"
generates:
src/generated/graphql.tsx:
plugins:
- "typescript"
- "typescript-operations"
- "typescript-react-apollo"
./graphql.schema.json:
plugins:
- "introspection"
Run Code Online (Sandbox Code Playgroud)
这是package.json我用来生成类型 ( yarn schema)的脚本:
"schema": "graphql-codegen --config codegen.yml"
Run Code Online (Sandbox Code Playgroud)
所有这些都是通过执行 cli 向导自动生成的yarn codegen init。
但是当我运行时yarn schema,这些是我得到的错误:
(服务器正在运行http://localhost:3001/graphql并公开图形模式。
感谢您的帮助和建议
这是托管在我的服务器中的 .graphql 文件(http://localhost:3001/graphql
# -----------------------------------------------
# !!! THIS FILE WAS GENERATED BY TYPE-GRAPHQL !!!
# !!! DO NOT MODIFY THIS FILE BY YOURSELF !!!
# -----------------------------------------------
"""Date …Run Code Online (Sandbox Code Playgroud) 我有这段代码:
import inspect
import ast
def func(foo):
return foo.bar - foo.baz
s = inspect.getsource(func)
xx = ast.parse(s)
class VisitCalls(ast.NodeVisitor):
def visit_Name(self, what):
if what.id == 'foo':
print ast.dump(what.ctx)
VisitCalls().visit(xx)
Run Code Online (Sandbox Code Playgroud)
从函数'func'我想提取:
['foo.bar', 'foo.baz']
Run Code Online (Sandbox Code Playgroud)
或类似的东西:
(('foo', 'bar'), ('foo', 'baz))
Run Code Online (Sandbox Code Playgroud)
编辑
我想将一个普通的python函数的代码转换为电子表格公式.
所以我需要转换:
foo.bar - foo.baz
Run Code Online (Sandbox Code Playgroud)
至:
=A1-B1
Run Code Online (Sandbox Code Playgroud)
示例电子表格http://img441.imageshack.us/img441/1451/84516405.png
**再次编辑*
以下程序输出:
('A1', 5)
('B1', 3)
('C1', '= A1 - B1')
Run Code Online (Sandbox Code Playgroud)
代码:
import ast, inspect
import codegen # by Armin Ronacher
from collections import OrderedDict
class SpreadSheetFormulaTransformer(ast.NodeTransformer):
def __init__(self, sym):
self.sym = …Run Code Online (Sandbox Code Playgroud) 我使用swagger codegen生成jaxrs服务器端类以及客户端java类.
这是我用来生成类的命令__CODE__
java -jar modules/swagger-codegen-distribution/target/swagger-codegen-distribution-2.1.2-M1.jar -i /Users/me/Workspace/swagger-codegen/samples/yaml/echo.yaml -l jaxrs -o samples/server/echo/java
Run Code Online (Sandbox Code Playgroud)
生成的服务器代码有一个占位符来写我的"魔法".
public Response echo(@ApiParam(value = "" )@HeaderParam("headerParam") String headerParam,
@ApiParam(value = "",required=true) @QueryParam("message") String message)
throws NotFoundException {
// do some magic!
return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build();
}
Run Code Online (Sandbox Code Playgroud)
我在"echo"方法中添加了"magic"并重新生成了代码,只是为了看到它消失了.避免丢失自定义代码的一种方法是修改codegen模板以生成接口而不是类.然后我可以在实现的类中拥有所有自定义代码.
我试图找出是否有一种方法可以保留自定义"魔法",即使在重新生成代码之后,或者有更好的方法来处理这种情况,而不是更改模板以生成接口而不是类.
我试图在FreeBSD上编译Echoprint codegen,但是失败了.但这里是我所得到的,当我尝试运行make或make install
> make "Makefile", line 35: Missing dependency operator "Makefile", line 39: Need an operator "Makefile", line 41: Need an operator "Makefile", line 50: warning: duplicate script for target "%.o" ignored "Makefile", line 53: warning: duplicate script for target "%.o" ignored "Makefile", line 56: warning: duplicate script for target "%.o" ignored "Makefile", line 61: Missing dependency operator "Makefile", line 62: warning: duplicate script for target "ifeq" ignored "Makefile", line 62: warning: duplicate script for target "(,Darwin)" …
基于我在这里找到的前一个例子,我试图找出如何生成一个Fortran代码,该代码对应于我需要坚持的特定形式.所需的FORTRAN代码将如下所示(它基于FitzHugh-Nagumo模型):
SUBROUTINE FF(NE,U,PAR,F)
! ---------- --
! Define the nonlinear term
IMPLICIT NONE
INTEGER, INTENT(IN) :: NE
DOUBLE PRECISION, INTENT(IN) :: U(NE),PAR(*)
DOUBLE PRECISION, INTENT(OUT) :: F(NE)
DOUBLE PRECISION u,v,e,a1,a0
u=U(1)
v=U(2)
e=PAR(1)
a1=PAR(2)
a0=PAR(3)
F(1)= u-u**3-v
F(2)= e*(u-a1*v-a0)
END SUBROUTINE FF
Run Code Online (Sandbox Code Playgroud)
我设法在SymPy中创建正确的表达式,但我还没弄清楚如何生成所需的代码codegen.这是我到目前为止的尝试:
from sympy import symbols,latex
from sympy.utilities.codegen import codegen
from sympy.tensor import IndexedBase, Idx
from sympy import Matrix
U, PAR = symbols('U PAR', cls=IndexedBase)
u = U[1]
v = U[2]
e = …Run Code Online (Sandbox Code Playgroud) 我希望在 Rust 中使用SWC来生成一些 TypeScript 代码。不幸的是,发射器似乎只能打印 JavaScript。这是正确的,还是有办法打印 TypeScript?例如,假设我们正在制作以下 AST。
use swc_atoms::js_word;
use swc_common::{BytePos, Span, SyntaxContext};
use swc_ecmascript;
use swc_ecmascript::ast;
fn main() {
let program = ast::Program::Module(ast::Module {
body: vec![ast::ModuleItem::ModuleDecl(ast::ModuleDecl::ExportDecl(
ast::ExportDecl {
decl: ast::Decl::TsTypeAlias(ast::TsTypeAliasDecl {
span: Span::default(),
declare: false,
id: ast::Ident::new(js_word!(""), Span::default()),
type_params: None,
type_ann: Box::new(ast::TsType::TsKeywordType(ast::TsKeywordType {
span: Span::default(),
kind: ast::TsKeywordTypeKind::TsStringKeyword,
})),
}),
span: Span::default(),
},
))],
shebang: None,
span: Span::new(BytePos(1), BytePos(1), SyntaxContext::empty()),
});
}
Run Code Online (Sandbox Code Playgroud)
如何获取与programAST 对应的 TypeScript?
我是注释处理和代码生成的新手。我想知道如何执行这样的操作,比如将新方法附加到现有类。这是我想要做的一个例子:
假设我们有一个带有自定义注释的类,如下所示:
class SourceClass {
@CustomAnnotation
fun annotatedFun1(vararg argument: Any) {
//Do something
}
@CustomAnnotation
fun annotatedFun2(vararg argument: Any) {
//Do something
}
fun someOtherFun() {
//Do something
}
}
Run Code Online (Sandbox Code Playgroud)
我想得到的结果 - 该类的扩展副本:
class ResultClass {
fun hasFunWithName(name: String): Boolean {
return (name in arrayOf("annotatedFun1", "annotatedFun2"))
}
fun callFunByName(name: String, vararg arguments: Any) {
when (name) {
"annotatedFun1" -> annotatedFun1(*arguments)
"annotatedFun2" -> annotatedFun2(*arguments)
}
}
fun annotatedFun1(vararg argument: Any) {
//Do something
}
fun annotatedFun2(vararg argument: Any) {
//Do something …Run Code Online (Sandbox Code Playgroud) 我的 openapi 合约中有以下模式定义来表示commission amount。
commissionAmount:
type: number
minimum: -99999.99
maximum: 99999.99
Run Code Online (Sandbox Code Playgroud)
生成的代码:
@Valid
@DecimalMin("-99999.99") @DecimalMax("99999.99")
public BigDecimal getCommissionAmount() {
return commAmt;
}
Run Code Online (Sandbox Code Playgroud)
生成的代码很好并且符合预期。我只是想知道这些-99999.99以及和99999.99的有效值。minimummaximum
提出这个问题的原因是它没有检查小数部分的限制。例如,我期望12345.678is invalid ,12345.67is valid 。但它将两者标记为有效。
I read@Digits用于检查整数和小数部分的位数限制。我如何告诉也openapi-generator-maven-plugin进行注释?Digits
预期生成的代码:
@Valid
@Digits(integer = 5, fraction = 2)
@DecimalMin("-99999.99") @DecimalMax("99999.99")
public BigDecimal getCommissionAmount() {
return commAmt;
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个突变,但我不断发现 POST 正文丢失。我可以在调用 urql 和 codegen 挂钩之前记录数据,并且可以在错误的变量中看到数据,但 chrome 不断因“POST body Missing”错误而崩溃,并且服务器的解析器永远不会被命中。
我在 React Client 上使用 Urql 和 Codegen,并在 Express API 上使用 Apollo-server。
这是我的代码:
突变定义(用于代码生成)
mutation UserLogin($email: String!, $password: String!) {
login(email: $email, password: $password) {
errors {
email {
error
isValid
}
password {
error
isValid
}
}
token
}
}
Run Code Online (Sandbox Code Playgroud)
代码生成输出:
mutation UserLogin($email: String!, $password: String!) {
login(email: $email, password: $password) {
errors {
email {
error
isValid
}
password {
error
isValid
}
}
token
}
} …Run Code Online (Sandbox Code Playgroud) codegen ×10
graphql ×2
java ×2
kotlin ×2
python ×2
typescript ×2
annotations ×1
echoprint ×1
freebsd ×1
json ×1
kapt ×1
moshi ×1
openapi ×1
python-2.7 ×1
rust ×1
swagger ×1
swc-compiler ×1
sympy ×1
urql ×1