EdjCase.ICP.ClientGenerator 3.2.1

There is a newer version of this package available.
See the version list below for details.
dotnet tool install --global EdjCase.ICP.ClientGenerator --version 3.2.1                
This package contains a .NET tool you can call from the shell/command line.
dotnet new tool-manifest # if you are setting up this repo
dotnet tool install --local EdjCase.ICP.ClientGenerator --version 3.2.1                
This package contains a .NET tool you can call from the shell/command line.
#tool dotnet:?package=EdjCase.ICP.ClientGenerator&version=3.2.1                
nuke :add-package EdjCase.ICP.ClientGenerator --version 3.2.1                

Client Generator

Usage (dotnet tool)

Install with dotnet tools

dotnet tool install -g EdjCase.ICP.ClientGenerator

Run tool

(First run only) Initialize config file and update generated file

candid-client-generator init ./

Creates candid-client.toml file to update in specified directory

Example:

namespace = "My.Namespace" # Base namespace used for generated files
output-directory = "./Clients" # Directory to put clients. Each client will get its own sub folder based on its name. If not specified, will use current directory
no-folders = false # If true, will put all the files in a single directory

[[clients]]
name = "Dex" # Used for the name of the folder and client class
type = "file" # Create client based on service definition file
file-path = "./ServiceDefinitionFiles/Dex.did" # Service definition file path
output-directory = "./Clients/D" # Override base output directory, but this specifies the subfolder
no-folders = false # If true, will put all the files in a single directory


# Can specify multiple clients by defining another
[[clients]]
name = "Governance"
type = "canister" # Create client based on canister
canister-id = "rrkah-fqaaa-aaaaa-aaaaq-cai" # Canister to create client for

Generate clients

candid-client-generator ./

or

candid-client-generator gen ./

Config file options

Top Level:
  • namespace - (Text) REQUIRED. The base namespace used in all C# files generated. Files generated in a sub-folder will have a more specific namespace to match. This namespace can be overidden per client.
  • output-directory - (Text) OPTIONAL. Directory to put all generated files. Each client will have a sub-folder within the output directory that will match the client name. If not specified, the working directory will be used
  • no-folders - (Bool) OPTIONAL. If true, no sub-folders will be generated for the clients or the models within the clients. All generated files will be in a flat structure. Defaults to false
  • url - (Text) OPTIONAL. Sets the boundry node url to use for making calls to canisters on the IC. Can be set to a local developer instance/localhost. Defaults to 'https://ic0.app/'. This setting is only useful for clients of generation type canister
  • feature-nullable - (Bool) Optional. Sets whether to use the C# nullable feature when generating the client (like object?). Defaults to true
  • keep-candid-case - (Bool) Optional. If true, the names of properties and methods will keep the raw candid name. Otherwise they will be converted to something prettier. Defaults to false
Client Level:
  • name - (Text) REQUIRED. The name of the sub-folder put the client files and the prefix to the client class name.
  • type - (Text) REQUIRED. An enum value to indicate what type of client generation method to use. Each enum value also has associated configuration settings. Options:
    • file - Will create a client based on a service definition file (*.did)
      • file-path - (Text) REQUIRED. The file path to the *.did file to generate from
    • canister - Creates a client based on a canister id
      • cansiter-id - (Text) REQUIRED. The principal id of the canister to generate a client for
  • output-directory - (Text) OPTIONAL. Directory to put all generated client files. Overrides the top level output-directory. NOTE: this does not create a sub-folder based on the client name like the top level output-directory does
  • no-folders - (Bool) OPTIONAL. If true, no sub-folders will be generated for the client. All generated files will be in a flat structure. Defaults to false. Overrides the top level no-folders
  • feature-nullable - (Bool) Optional. Sets whether to use the C# nullable feature when generating the client (like object?). Defaults to true. Overrides the top level feature-nullable
  • keep-candid-case - (Bool) Optional. If true, the names of properties and methods will keep the raw candid name. Otherwise they will be converted to something prettier. Defaults to false. Overrides the top level keep-candid-case

Custom Client Generators via Code

Due to the complexity of different use cases, custom tweaks to the output of the client generators might be helpful. This process can be handled with calling the ClientCodeGenerator manually and using the .NET CSharpSyntaxRewriter (tutorial can be found HERE)

var options = new ClientGenerationOptions(
	name: "MyClient",
	@namespace: "My.Namespace",
	noFolders: false,
	featureNullable: true,
	keepCandidCase: false
);
ClientSyntax syntax = await ClientCodeGenerator.GenerateClientFromCanisterAsync(canisterId, options);
var rewriter = new MyCustomCSharpSyntaxRewriter();
syntax = syntax.Rewrite(rewriter);
(string clientFile, List<(string Name, string Contents)> typeFiles) = syntax.GenerateFileContents();
// Write string contents to files...
Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

This package has no dependencies.

Version Downloads Last updated
7.0.0-pre.1 45 10/27/2024
6.2.1 105 10/23/2024
6.2.0 92 10/21/2024
6.1.2 153 4/30/2024
6.1.1 127 4/17/2024
6.1.0 172 4/15/2024
6.0.0 223 3/21/2024
5.1.0 236 1/25/2024
5.0.0 289 1/12/2024
5.0.0-pre.2 200 12/13/2023
5.0.0-pre.1 112 12/11/2023
4.1.0 472 11/10/2023
4.0.1 508 11/1/2023
4.0.0 449 10/12/2023
4.0.0-pre.10 153 10/10/2023
4.0.0-pre.9 138 10/10/2023
4.0.0-pre.8 148 10/9/2023
4.0.0-pre.7 131 10/9/2023
4.0.0-pre.6 171 10/9/2023
4.0.0-pre.5 167 10/8/2023
4.0.0-pre.4 158 10/6/2023
4.0.0-pre.3 121 10/5/2023
4.0.0-pre.2 135 9/27/2023
4.0.0-pre.1 150 9/25/2023
3.2.2 535 9/22/2023
3.2.1 505 9/22/2023
3.2.0 417 8/2/2023
3.1.5 540 9/27/2023
3.1.4 382 7/20/2023
3.1.3 310 6/12/2023
3.1.2 393 5/11/2023
3.1.1 380 5/9/2023
3.1.0 330 5/9/2023
3.0.1 248 5/2/2023
3.0.0 297 5/1/2023
3.0.0-beta.1 146 4/17/2023
2.3.9 223 5/1/2023
2.3.8 251 4/28/2023
2.3.7 247 4/28/2023
2.3.6 212 4/28/2023
2.3.5 237 4/27/2023
2.3.4 232 4/27/2023
2.3.3 235 4/26/2023
2.3.2 249 4/26/2023
2.3.1 273 4/26/2023
2.3.0 296 4/25/2023
2.2.10 239 4/24/2023
2.2.9 267 4/24/2023
2.2.8 250 4/24/2023
2.2.7 268 4/17/2023
2.2.6 304 4/12/2023
2.2.5 298 4/12/2023
2.2.4 290 4/11/2023
2.2.3 297 4/11/2023
2.2.2 317 4/7/2023
2.2.1 325 4/7/2023
2.2.0 315 4/6/2023
2.1.1 321 3/30/2023
2.1.0 346 3/23/2023
2.0.8 387 3/20/2023
2.0.7 322 3/12/2023
2.0.2 361 3/10/2023
2.0.1 348 3/10/2023
2.0.0 332 3/8/2023
2.0.0-beta.26 149 3/8/2023
2.0.0-beta.25 147 3/8/2023
2.0.0-beta.24 131 3/7/2023
2.0.0-beta.23 138 3/6/2023
2.0.0-beta.22 135 3/1/2023
2.0.0-beta.21 142 2/28/2023
2.0.0-beta.20 141 2/20/2023
2.0.0-beta.19 143 2/14/2023
2.0.0-beta.18 139 2/14/2023
2.0.0-beta.17 134 2/14/2023
2.0.0-beta.16 138 2/11/2023
2.0.0-beta.15 139 2/10/2023
2.0.0-beta.14 133 2/6/2023
2.0.0-beta.13 139 2/3/2023
2.0.0-beta.12 148 2/2/2023
2.0.0-beta.11 142 1/30/2023
2.0.0-beta.10 141 1/23/2023
2.0.0-beta.9 137 1/19/2023
2.0.0-beta.7 131 1/12/2023
2.0.0-beta.6 136 12/31/2022
2.0.0-beta.5 130 12/30/2022
2.0.0-beta.4 127 12/21/2022
2.0.0-beta.3 139 12/19/2022
2.0.0-beta.2 125 12/10/2022
2.0.0-beta.1 135 12/2/2022
1.2.1 440 11/29/2022
1.2.0 389 11/28/2022
1.1.0 401 11/28/2022
1.0.3 423 11/25/2022
1.0.2 543 6/8/2022
1.0.1 523 6/7/2022
0.0.1-beta.20 165 6/1/2022
0.0.1-beta.19 170 5/20/2022
0.0.1-beta.14 170 5/19/2022