SpiceWeaver 0.2.0

dotnet add package SpiceWeaver --version 0.2.0
NuGet\Install-Package SpiceWeaver -Version 0.2.0
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="SpiceWeaver" Version="0.2.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add SpiceWeaver --version 0.2.0
#r "nuget: SpiceWeaver, 0.2.0"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install SpiceWeaver as a Cake Addin
#addin nuget:?package=SpiceWeaver&version=0.2.0

// Install SpiceWeaver as a Cake Tool
#tool nuget:?package=SpiceWeaver&version=0.2.0

SpiceWeaver

SpiceWeaver is a .NET Source Generator for SpiceDB schemas.

Usage

Add SpiceWeaver to your .csproj file:

<ItemGroup>
    <PackageReference Include="SpiceWeaver" Version="0.1.0" PrivateAssets="all"/>
</ItemGroup>

Generate from Schema File

To generate source directly from a schema file, spice2json must be installed.

Add your SpiceDB schema to your .csproj file as an Additional File and flag it as a schema file:

<ItemGroup>
    <AdditionalFiles Include="schema.zed" SpiceWeaver_SchemaFile="true"/>
</ItemGroup>

Generate from JSON file

If your schema has already been converted to a json file using spice2json, you can bypass conversion in the Source Generator using the IsJsonfile option:

<ItemGroup>
    <AdditionalFiles Include="schema.json" SpiceWeaver_SchemaFile="true" SpiceWeaver_IsJson="true"/>
</ItemGroup>

Output

Using the default settings, the generator will output a class named SpiceWeaver.Schema.

Given the following schema:

definition user {}

definition document {
    relation viewer: user
    relation editor: user

    permission view = viewer + editor
    permission edit = editor
}

The following source will be generated:

namespace SpiceWeaver
{
    public static class Schema
    {
        public static class Definitions
        {
            public static class User
            {
                public const string Name = "user";
                public static string WithId(string id) => $"user:{id}";
            }

            public static class Document
            {
                public const string Name = "document";
                public static string WithId(string id) => $"document:{id}";
                public static class Relations
                {
                    public const string Viewer = "viewer";
                    public const string Editor = "editor";
                }

                public static class Permissions
                {
                    public const string View = "view";
                    public const string Edit = "edit";
                }
            }
        }
    }
}

Options

All options are prefixed with SpiceWeaver_

Global

Name Description Default
Spice2JsonPath The relative path to the spice2json binary spice2json

Global options are set in the .csproj file directly in a PropertyGroup and the configured option applies to all schema files

<PropertyGroup>
    <SpiceWeaver_Spice2JsonPath>path/to/spice2json</SpiceWeaver_Spice2JsonPath>
</PropertyGroup>

File

Name Description Default
SchemaFile Set to true to indicate the file should be included for source generation n/a
IsJson Set to true to indicate the file is already a spice2json JSON file n/a
Namespace Sets the namespace of the generated class SpiceWeaver
ClassName Sets the name of the generated class Schema

File options are per-file and are set on individual AdditionalFiles items

<ItemGroup>
    <AdditionalFiles Include="schema.zed" SpiceWeaver_SchemaFile="true" SpiceWeaver_Namespace="MyNamespace"/>
</ItemGroup>
There are no supported framework assets in this package.

Learn more about Target Frameworks and .NET Standard.

This package has no dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
0.2.0 82 4/26/2024
0.1.1 83 4/25/2024
0.1.0 38 4/22/2024