Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
92e5406
Start work on client
PineappleIOnic Mar 8, 2021
1fa69ba
Add formdata and json to call() on client
PineappleIOnic Mar 8, 2021
96ae155
Create basic twig templates
PineappleIOnic Mar 10, 2021
c9048f6
Fix accidental NodeJS Template Change
PineappleIOnic Mar 14, 2021
50d4cb8
Finish Template
PineappleIOnic Mar 14, 2021
66169af
Add Readme and user-agent header
PineappleIOnic Mar 15, 2021
9f56d8b
Fix Licence Name in cargo.toml and Indentation in the twig templates
PineappleIOnic Mar 16, 2021
a43d7af
fix whitespace
TorstenDittmann Mar 16, 2021
070a10c
Remove Hardcoded Package Name
PineappleIOnic Mar 18, 2021
fbeeb7f
Merge branch 'rust-language-support' of https://github.com/PineappleI…
PineappleIOnic Mar 18, 2021
8d3bbba
Fix imports that were missed when changing to variable package name
PineappleIOnic Mar 18, 2021
07499a8
Make arrays easier to use by using borrowed arrays
PineappleIOnic Mar 18, 2021
28a3658
Add example generation
PineappleIOnic Mar 22, 2021
09aeab3
Merge branch 'master' into rust-language-support
PineappleIOnic Mar 22, 2021
c0bb109
Remove Java from SDKTests
PineappleIOnic Mar 22, 2021
447ba46
fix tests
PineappleIOnic Mar 22, 2021
918e4f1
First implementation of Exceptions
PineappleIOnic Mar 23, 2021
5d5f559
Add tests for exceptions
PineappleIOnic Mar 23, 2021
64a081b
Fix hardcoded exception
PineappleIOnic Mar 30, 2021
116d3d7
Only return underlying error when we fail to parse a Appwrite API Error
PineappleIOnic Mar 31, 2021
23e3f9e
Merge branch 'master' into rust-language-support
TorstenDittmann Apr 16, 2021
601dc43
Update test to add Test Started message
PineappleIOnic Apr 16, 2021
f346316
Update templates/rust/src/client.rs.twig
PineappleIOnic Apr 29, 2021
3cccccd
Add cookies feature on reqwest
PineappleIOnic Apr 29, 2021
a1f6745
Update templates/rust/src/services/service.rs.twig
PineappleIOnic Apr 29, 2021
434cb04
Add add_self_signed function to Client in SDK and Remove Cookies
PineappleIOnic May 4, 2021
d79ba01
Merge branch 'master' into rust-language-support
PineappleIOnic May 7, 2021
5fa73cd
Update SDKTest.php
PineappleIOnic May 11, 2021
8874c2a
Merge branch 'master' into rust-language-support
PineappleIOnic May 12, 2021
6d3d35f
Merge branch 'appwrite:master' into rust-language-support
PineappleIOnic Jun 1, 2021
45f2977
Add text error fallback
PineappleIOnic Jun 1, 2021
694311e
Merge branch 'master' into rust-language-support
PineappleIOnic Jun 7, 2021
b7fbda3
Merge branch 'appwrite:master' into rust-language-support
PineappleIOnic Jun 14, 2021
ebe5153
Merge branch 'master' into rust-language-support
PineappleIOnic Jun 21, 2021
dc6d216
Bring up to date with master
PineappleIOnic Jun 21, 2021
583a0da
Add Floats
PineappleIOnic Jun 23, 2021
b02485d
Implement Optional Parameters into Rust SDK
PineappleIOnic Jun 25, 2021
e11a6f9
Merge branch 'master' into rust-language-support
PineappleIOnic Jun 29, 2021
1ab01c9
Update service.rs.twig
PineappleIOnic Jun 29, 2021
eb42bbd
Merge branch 'master' into rust-language-support
PineappleIOnic Sep 23, 2021
ce4ca0c
Merge branch 'master' into rust-language-support
PineappleIOnic Sep 23, 2021
20a8d84
tests(rust): improvements
TorstenDittmann Oct 17, 2021
a1cfba2
revert whitelist
TorstenDittmann Oct 17, 2021
6815c8d
Merge pull request #4 from TorstenDittmann/rust-language-support-impr…
PineappleIOnic Oct 17, 2021
4eea144
Update SDKTest.php
PineappleIOnic Oct 17, 2021
abf62b5
Update Cargo.toml.twig
PineappleIOnic Oct 18, 2021
65f5071
Merge branch 'master' into rust-language-support
PineappleIOnic Dec 6, 2021
038a697
Merge branch 'master' into rust-language-support
PineappleIOnic Jan 6, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions composer.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

27 changes: 26 additions & 1 deletion example.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
use Appwrite\SDK\Language\SwiftClient;
use Appwrite\SDK\Language\DotNet;
use Appwrite\SDK\Language\Flutter;
use Appwrite\SDK\Language\Rust;
use Appwrite\SDK\Language\Android;
use Appwrite\SDK\Language\Kotlin;

Expand Down Expand Up @@ -395,8 +396,32 @@ function getSSLPage($url) {
;
$sdk->generate(__DIR__ . '/examples/CLI');

// Android
// Rust
$rust = new Rust();
$rust->setPackageName('appwrite');

$sdk = new SDK($rust, new Swagger2($spec));

$sdk
->setName('NAME')
->setDescription('Repo description goes here')
->setShortDescription('Repo short description goes here')
->setURL('https://example.com')
->setLogo('https://appwrite.io/v1/images/console.png')
->setLicenseContent('test test test')
->setWarning('**WORK IN PROGRESS - NOT READY FOR USAGE**')
->setChangelog('**CHANGELOG**')
->setVersion('0.0.1')
->setGitUserName('repoowner')
->setGitRepoName('reponame')
->setDefaultHeaders([
'X-Appwrite-Response-Format' => '0.7.0',
])
;

$sdk->generate(__DIR__ . '/examples/rust');

// Android
$sdk = new SDK(new Android(), new Swagger2($spec));

$sdk
Expand Down
262 changes: 262 additions & 0 deletions src/SDK/Language/Rust.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,262 @@
<?php

namespace Appwrite\SDK\Language;

use Appwrite\SDK\Language;

class Rust extends Language {
/**
* @var array
*/
protected $params = [
'packageName' => 'packageName',
];

/**
* @param string $name
* @return $this
*/
public function setPackageName($name)
{
$this->setParam('packageName', $name);

return $this;
}

/**
* @return string
*/
public function getName()
{
return 'Rust';
}

/**
* Get Language Keywords List
*
* @return array
*/
public function getKeywords()
{
return [
"type",
"as",
"break",
"const",
"continue",
"crate",
"else",
"enum",
"extern",
"false",
"fn",
"for",
"if",
"impl",
"in",
"let",
"loop",
"match",
"mod",
"move",
"mut",
"pub",
"ref",
"return",
"self",
"Self",
"static",
"struct",
"super",
"trait",
"true",
"type",
"unsafe",
"use",
"where",
"while",
"async",
"await",
"dyn",
"abstract",
"become",
"box",
"do",
"final",
"macro",
"override",
"priv",
"typeof",
"unsized",
"virtual",
"yield",
"try"
];
}

/**
* @param $type
* @return string
*/
public function getTypeName($type)
{
switch ($type) {
case self::TYPE_OBJECT:
return 'Option<HashMap<String, crate::client::ParamType>>';
break;
case self::TYPE_INTEGER:
return 'i64';
break;
case self::TYPE_STRING:
return '&str';
break;
case self::TYPE_FILE:
return 'std::path::PathBuf';
break;
case self::TYPE_BOOLEAN:
return 'bool';
break;
case self::TYPE_ARRAY:
return '&[&str]';
case self::TYPE_NUMBER:
return 'f64';
break;
}

return $type;
}

/**
* @param array $param
* @return string
*/
public function getParamDefault(array $param)
{
return "";
}

/**
* @param array $param
* @return string
*/
public function getParamExample(array $param)
{
$type = $param['type'] ?? '';
$example = $param['example'] ?? '';

$output = '';

if(empty($example) && $example !== 0 && $example !== false) {
switch ($type) {
case self::TYPE_FILE:
$output .= 'std::path::PathBuf::from("./path-to-files/image.jpg")';
break;
case self::TYPE_NUMBER:
case self::TYPE_INTEGER:
$output .= '0';
break;
case self::TYPE_BOOLEAN:
$output .= 'false';
break;
case self::TYPE_STRING:
$output .= 'String::new()';
break;
case self::TYPE_OBJECT:
$output .= 'new Object()';
break;
case self::TYPE_ARRAY:
$output .= '&[]';
break;
}
}
else {
switch ($type) {
case self::TYPE_OBJECT:
case self::TYPE_FILE:
case self::TYPE_NUMBER:
case self::TYPE_INTEGER:
case self::TYPE_ARRAY:
$output .= $example;
break;
case self::TYPE_BOOLEAN:
$output .= ($example) ? 'true' : 'false';
break;
case self::TYPE_STRING:
$output .= sprintf('"%s"', $example);
break;
}
}

return $output;
}

/**
* @return array
*/
public function getFiles()
{
return [
[
'scope' => 'default',
'destination' => 'Cargo.toml',
'template' => '/rust/Cargo.toml.twig',
'minify' => false,
],
[
'scope' => 'default',
'destination' => 'README.md',
'template' => '/rust/README.md.twig',
'minify' => false,
],
[
'scope' => 'default',
'destination' => 'CHANGELOG.md',
'template' => '/rust/CHANGELOG.md.twig',
'minify' => false,
],
[
'scope' => 'default',
'destination' => 'LICENSE',
'template' => '/rust/LICENSE.twig',
'minify' => false,
],
[
'scope' => 'method',
'destination' => 'docs/examples/{{service.name | caseLower}}/{{method.name | caseDash}}.md',
'template' => '/rust/docs/example.md.twig',
'minify' => false,
],
[
'scope' => 'method',
'destination' => 'src/lib.rs',
'template' => '/rust/src/lib.rs.twig',
'minify' => false,
],
[
'scope' => 'method',
'destination' => 'src/client.rs',
'template' => '/rust/src/client.rs.twig',
'minify' => false,
],
[
'scope' => 'method',
'destination' => 'src/services/mod.rs',
'template' => '/rust/src/services/mod.rs.twig',
'minify' => false,
],
[
'scope' => 'method',
'destination' => 'src/services/exception.rs',
'template' => '/rust/src/services/exception.rs.twig',
'minify' => false,
],
[
'scope' => 'service',
'destination' => 'src/services/{{service.name | caseDash}}.rs',
'template' => '/rust/src/services/service.rs.twig',
'minify' => false,
],
];
}
}

2 changes: 1 addition & 1 deletion src/SDK/SDK.php
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ public function __construct(Language $language, Spec $spec)
$this->twig->addFilter(new TwigFilter('dartComment', function ($value) {
$value = explode("\n", $value);
foreach ($value as $key => $line) {
$value[$key] = " /// " . wordwrap($value[$key], 75, "\n /// ");
$value[$key] = " /// " . wordwrap($value[$key], 75, "\n /// ");
}
return implode("\n", $value);
}, ['is_safe' => ['html']]));
Expand Down
6 changes: 3 additions & 3 deletions templates/dart/lib/services/service.dart.twig
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@ class {{ service.name | caseUcfirst }} extends Service {
{{ service.name | caseUcfirst }}(Client client): super(client);
{% for method in service.methods %}

/// {{ method.title }}
/// {{ method.title }}
{% if method.description %}
///
///
{{ method.description|dartComment }}
///
///
{% endif %}
{% if method.type == 'webAuth' %}Future{% elseif method.type == 'location' %} Future<Uint8List> {% else %} {% if method.responseModel and method.responseModel != 'any' %}Future<models.{{method.responseModel | ucFirstAndEscape}}>{% else %}Future{% endif %}{% endif %} {{ method.name | caseCamel }}({{ _self.method_parameters(method.parameters) }}) async {
final String path = '{{ method.path }}'{% for parameter in method.parameters.path %}.replaceAll('{{ '{' }}{{ parameter.name | caseCamel }}{{ '}' }}', {{ parameter.name | caseCamel | escapeKeyword }}){% endfor %};
Expand Down
2 changes: 1 addition & 1 deletion templates/node/lib/services/service.js.twig
Original file line number Diff line number Diff line change
Expand Up @@ -53,4 +53,4 @@ class {{ service.name | caseUcfirst }} extends Service {
{% endfor %}
}

module.exports = {{ service.name | caseUcfirst }};
module.exports = {{ service.name | caseUcfirst }};
11 changes: 11 additions & 0 deletions templates/rust/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Generated by Cargo
# will have compiled files and executables
debug/
target/

# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries
# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html
Cargo.lock

# These are backup files generated by rustfmt
**/*.rs.bk
1 change: 1 addition & 0 deletions templates/rust/CHANGELOG.md.twig
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{{sdk.changelog}}
19 changes: 19 additions & 0 deletions templates/rust/Cargo.toml.twig
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
[package]
name = "{{ language.params.packageName }}"
version = "{{ sdk.version }}"
authors = ["Appwrite Team <[email protected]>"]
edition = "2018"
description = "{{ sdk.shortDescription }}"
licence = "{{ sdk.licenseName }}"
repository = "{{ sdk.gitURL }}"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
url = "2.2.1"
reqwest = { version = "0.11", features = ["json", "blocking", "multipart"] }

# Serde
serde = "1.0.124"
serde_derive = "1.0.124"
serde_json = "1.0.59"
1 change: 1 addition & 0 deletions templates/rust/LICENSE.twig
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{{sdk.licenseContent}}
Loading