lib/base_client_generator.js (80 lines of code) (raw):
/* eslint-disable max-len */
'use strict';
const Emitter = require('@darabonba/emitter');
const path = require('path');
const { save } = require('./util');
// system modules
const CommonGenerator = require('./common_generator');
class ConfigurationGenerator extends Emitter {
constructor(ast, ctx) {
super(' ');
this.ast = ast;
this.ctx = ctx;
}
codegen(level = 0) {
this.emitln(`// This file is auto-generated, you can edit it.`, level);
this.emitln(`package ${this.ctx.package};`, level);
this.emitln();
this.emitln(`import darabonba.core.ServiceConfiguration;`, level);
this.emitln();
this.emitln(`/**`, level);
this.emitln(` * <p>${this.ctx.description ? this.ctx.description : 'Base Configuration'}.</p>`, level);
this.emitln(` * <p>Can be overwritten by handwriting here.</p>`, level);
this.emitln(` */`, level);
this.emitln(`public final class Configuration implements ServiceConfiguration {`, level);
this.emitln();
this.emitln('private Configuration() {', level + 1);
this.emitln('}', level + 1);
this.emitln();
this.emitln(`public static Configuration create() {`, level + 1);
this.emitln(`return new Configuration();`, level + 2);
this.emitln(`}`, level + 1);
this.emitln();
this.emitln('}', level);
}
}
class Generator extends CommonGenerator {
constructor(ast, ctx) {
super(ast, ctx);
}
codegen(level = 0) {
this.emitHeader(level);
this.emitln();
this.emitServiceName(level + 1);
this.emitln();
this.emitServiceConfiguration(level + 1);
this.emitln();
this.emitln('}');
this.emitConfiguration(level);
}
emitHeader(level) {
this.emitln(`// This file is auto-generated, you can edit it.`, level);
this.emitln(`package ${this.ctx.package};`, level);
this.emitln();
this.emitln(`import darabonba.core.*;`, level);
this.emitln(`import darabonba.core.client.*;`, level);
this.emitln(`import darabonba.core.interceptor.*;`, level);
this.emitln();
this.emitln(`/**`, level);
this.emitln(` * <p>${this.ctx.description ? this.ctx.description : 'Base client'}.</p>`, level);
this.emitln(` * <p>Can be overwritten by handwriting here.</p>`, level);
this.emitln(` */`, level);
this.emitln(`public abstract class BaseClientBuilder<BuilderT extends IClientBuilder<BuilderT, ClientT>, ClientT> extends TeaClientBuilder<BuilderT, ClientT> {`, level);
}
emitServiceName(level) {
this.emitln('@Override', level);
this.emitln(`protected String serviceName() {`, level);
this.emitln(`return "${this.ctx.productId}${this.ctx.apiVersions}";`, level + 1);
this.emitln(`}`, level);
}
emitServiceConfiguration(level) {
this.emitln(`BuilderT serviceConfiguration(Configuration serviceConfiguration) {`, level);
this.emitln('clientConfiguration.setOption(ClientOption.SERVICE_CONFIGURATION, serviceConfiguration);', level + 1);
this.emitln('return (BuilderT) this;', level + 1);
this.emitln(`}`, level);
}
emitConfiguration(level) {
const configuration = new ConfigurationGenerator(this.ast, this.ctx);
configuration.codegen(level);
save(path.join(this.ctx.outputDir, `Configuration.java`), configuration.output);
}
}
module.exports = Generator;