Riven/srcgen/endpoints.rs.dt

165 lines
5.8 KiB
Plaintext
Raw Normal View History

2019-10-19 21:39:53 +00:00
{{
const spec = require('./.spec.json');
const dotUtils = require('./dotUtils.js');
2019-10-23 07:49:02 +00:00
}}{{= dotUtils.preamble() }}
2019-10-19 21:39:53 +00:00
// http://www.mingweisamuel.com/riotapi-schema/tool/
// Version {{= spec.info.version }}
2019-11-03 18:48:45 +00:00
//! Automatically generated endpoint handles.
2019-11-03 18:48:45 +00:00
use crate::models::*;
2019-10-22 21:28:23 +00:00
use std::future::Future;
2019-10-19 21:39:53 +00:00
use std::vec::Vec;
use url::form_urlencoded::Serializer;
2019-10-23 02:33:15 +00:00
use crate::Result;
2019-10-19 21:39:53 +00:00
use crate::consts::Region;
use crate::riot_api::RiotApi;
{{
const endpointGroups = {};
for (let path of Object.entries(spec.paths)) {
let ep = path[1]['x-endpoint'];
endpointGroups[ep] = endpointGroups[ep] || [];
endpointGroups[ep].push(path);
}
2019-10-22 05:43:06 +00:00
}}
impl RiotApi {
{{
for (const endpointName of Object.keys(endpointGroups)) {
const method = dotUtils.changeCase.snakeCase(endpointName);
const type = dotUtils.changeCase.pascalCase(endpointName);
}}
/// Returns a handle for accessing [{{= type }}](crate::endpoints::{{= type }}) endpoints.
/// # Riot Developer API Reference
/// <a href="https://developer.riotgames.com/apis#{{= endpointName }}" target="_blank">`{{= endpointName }}`</a>
///
/// Note: this method is automatically generated.
2019-10-22 07:01:11 +00:00
#[inline]
2019-10-22 05:43:06 +00:00
pub fn {{= method }}(&self) -> {{= type }} {
{{= type }} { base: self }
}
{{
}
}}
}
{{
2019-10-19 21:39:53 +00:00
for (let [ endpointName, endpointMethods ] of Object.entries(endpointGroups)) {
let endpoint = dotUtils.changeCase.pascalCase(endpointName);
const endpoint_snake_case = dotUtils.changeCase.snakeCase(endpointName);
2019-10-19 21:39:53 +00:00
}}
/// {{= endpoint }} endpoints handle, accessed by calling [`{{= endpoint_snake_case }}()`](crate::RiotApi::{{= endpoint_snake_case }}) on a [`RiotApi`](crate::RiotApi) instance.
/// # Riot Developer API Reference
/// <a href="https://developer.riotgames.com/apis#{{= endpointName }}" target="_blank">`{{= endpointName }}`</a>
///
/// Note: this struct is automatically generated.
2019-10-22 05:43:06 +00:00
pub struct {{= endpoint }}<'a> {
base: &'a RiotApi,
}
impl<'a> {{= endpoint }}<'a> {
2019-10-19 21:39:53 +00:00
{{
for (let [ route, path ] of endpointMethods)
{
let get = path.get;
if (!get)
continue;
let operationId = get.operationId;
let method = dotUtils.changeCase.snakeCase(operationId.slice(operationId.indexOf('.') + 1));
let jsonInfo = get.responses['200'].content['application/json'];
let returnOptional = !!get['x-nullable-404'];
let parseType = dotUtils.stringifyType(jsonInfo.schema, { endpoint, fullpath: false });
let returnType = returnOptional ? `Option<${parseType}>` : parseType;
2019-10-19 21:39:53 +00:00
/* Cases if not rate limited. */
let rateLimitExcluded = get['x-app-rate-limit-excluded'] ? true : false;
/* Description processing. */
let descArr = get.description.split('\n');
2019-10-19 21:39:53 +00:00
/* Build argument comment & string. */
let argBuilder = [];
let makeParamCode = '';
let allParams = get.parameters;
let queryParams = [];
let routeArgument = dotUtils.formatRouteArgument(route);
if (allParams && allParams.length)
{
let pathParams = allParams.filter(p => 'path' === p.in)
.sortBy(({ name }) => route.indexOf(name));
2019-10-19 21:39:53 +00:00
let reqParams = allParams.filter(p => 'path' !== p.in && p.required);
let optParams = allParams.filter(p => 'path' !== p.in && !p.required)
.sortBy(({ name }) => {
let match = /(^[a-z]+|[A-Z]+(?![a-z])|[A-Z][a-z]+)/.exec(name);
2019-10-19 21:39:53 +00:00
return match.slice(1).reverse().join('');
});
queryParams = reqParams.concat(optParams);
for (let paramList of [ pathParams, reqParams, optParams ])
{
let required = paramList === pathParams;
for (let param of paramList)
{
argBuilder.push(', ', dotUtils.changeCase.snakeCase(param.name), ': ',
dotUtils.stringifyType(param.schema, { endpoint, optional: !required, owned: false }));
2019-10-19 21:39:53 +00:00
}
}
routeArgument = dotUtils.formatRouteArgument(route, pathParams);
}
for (var descLine of descArr)
{
}}
2019-10-29 22:25:53 +00:00
///{{= descLine ? ' ' + descLine : '' }}
2019-10-19 21:39:53 +00:00
{{
}
}}
2019-10-29 22:25:53 +00:00
/// # Parameters
/// * `region` - Region to query.
2019-10-19 21:39:53 +00:00
{{
if (allParams)
{
for (let param of allParams)
{
}}
2019-10-29 22:25:53 +00:00
/// * `{{= param.name }}`{{= param.required ? '' : ' (optional)' }}{{= param.description ? ' - ' + param.description : ''}}
2019-10-19 21:39:53 +00:00
{{
}
}
}}
/// # Riot Developer API Reference
/// <a href="{{= get.externalDocs.url }}" target="_blank">`{{= operationId }}`</a>
///
/// Note: this method is automatically generated.
2019-10-29 22:25:53 +00:00
pub fn {{= method }}(&self, region: Region{{= argBuilder.join('') }})
-> impl Future<Output = Result<{{= returnType }}>> + 'a
2019-10-29 22:25:53 +00:00
{
2019-10-19 21:39:53 +00:00
{{? queryParams.length }}
2019-10-29 22:38:46 +00:00
let mut query_params = Serializer::new(String::new());
2019-10-19 21:39:53 +00:00
{{
for (let queryParam of queryParams)
{
}}
2019-10-29 22:25:53 +00:00
{{= dotUtils.formatAddQueryParam(queryParam) }};
2019-10-19 21:39:53 +00:00
{{
}
}}
2019-10-29 22:25:53 +00:00
let query_string = query_params.finish();
2019-10-19 21:39:53 +00:00
{{?}}
2019-10-29 22:25:53 +00:00
let path_string = {{= routeArgument }};
self.base.get{{= returnOptional ? '_optional' : '' }}::<{{= parseType }}>("{{= operationId }}", region.into(), path_string, {{= queryParams.length ? 'Some(query_string)' : 'None' }})
2019-10-29 22:25:53 +00:00
}
2019-10-19 21:39:53 +00:00
{{
}
}}
}
{{
}
}}