Thanks to visit codestin.com
Credit goes to github.com

Skip to content

affederaffe/Tmds.DBus.SourceGenerator

Repository files navigation

Tmds.DBus.SourceGenerator

A roslyn source generator targeting the Tmds.DBus.Protocol API

Introduction

This source generator eliminates the usage of reflection to be trimmer- and AOT-friendly. For further documentation of Tmds.DBus and DBus in general, see https://github.com/tmds/Tmds.DBus#readme.

Usage

Note

This Source Generator targets the Tmds.DBus.Protocol API, which means you have to explicitly install said package.

Either install the NuGet package Tmds.DBus.SourceGenerator or clone the git repository and add a project reference to the source generator in your .csproj

<ItemGroup>
    <ProjectReference Include="./Tmds.DBus.SourceGenerator/Tmds.DBus.SourceGenerator/Tmds.DBus.SourceGenerator.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false" />
</ItemGroup>

<Import Project="./Tmds.DBus.SourceGenerator/Tmds.DBus.SourceGenerator/Tmds.DBus.SourceGenerator.props" />

Then add the XML definitions as AdditionalFiles to your project. Depending on whether you want to generate a Proxy or a handler, set the DBusGeneratorMode to either Proxy or Handler, respectively.

<ItemGroup>
    <AdditionalFiles Include="DBusXml/DBus.xml" DBusGeneratorMode="Proxy" />
    <AdditionalFiles Include="DBusXml/StatusNotifierItem.xml" DBusGeneratorMode="Handler" />
</ItemGroup>

Now you can instantiate the generated proxy class and use it like with the traditional Tmds.DBus. For handlers, create a new class and inherit from the generated one and implement its abstract methods.

Examples

For example, you may take a look at some projects that use this source generator:

How to get DBus interface definitions

DBus interface definitions are written in XML. There are mainly two ways for getting those:

  1. Finding the source online somewhere... This could be a GitHub repo or some obscure website from the mid-2000s (at your own risk).
  2. Dumping the definition via introspection If you have a service running on your system from which you want to extract the definition, you may use busctl, e.g.:
    To list available services:
    busctl list
    
    To inspect the object tree of a service:
    busctl tree <service name>
    
    To dump the XML definition of the interface:
    busctl introspect <service name> /path/to/object --xml-interface
    

About

A roslyn source generator for creating proxies targeting the Tmds.DBus.Protocol API

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages