Bonjour à tous !
Je viens vous présenter un petit tool que j'ai fait pour le projet HetwanSharp, qui sert à générer à un protocole exploitable à partir de fichier templates pour être adapté à n'importe quel langage (mais pour ce cas je n'ai fait que un exemple de template en C# mais avec un peu de bidouillage vous devriez être capable de vous en sortir si vous utilisez autre chose!).
Vous aurez besoin d'un fichier JSON contenant votre protocole exporté à l'aide de l'outil ici.
Une fois fait, modifiez les templates à votre guise, la configuration, et lancez le tout, vous aurez votre protocole en sortie.
Vous trouverez le descriptif des variables et filtres accessibles dans les templates sur le GitHub, mais aussi les possibilités supplémentaires si vous souhaitez rajouter du code en PHP - il y a un système de hook à la génération vous permettant d'ajouter des filtres sur le contenu, mais également des filtres Twig.
Exemple, voici mon template pour générer les types:
{%- use 'io.twig' -%}
{%- use 'constructor.twig' -%}
using HetwanSharp.Core.IO;
{% if class.hasEnumerationDependency == true %}
using HetwanSharp.Dofus.Protocol.Enum;
{% endif %}
using System;
{% if class.hasVectorDependency %}
using System.Collections.Generic;
using System.Linq;
{% endif %}
namespace HetwanSharp.Dofus.Protocol.Type
{
public class {{ class.name }}{% if class.parent %} : {{ class.parent.name }}{% endif ~%}
{
public const short Id = {{ class.id }};
public {% if class.isOverriding %} override{% elseif class.isVirtual %} virtual{% endif %} short TypeId => Id;
{%- block class_fields -%}
{{ parent()|ident(8) }}
{%- endblock -%}
{%- block constructor -%}
{{ parent()|ident(8) }}
{%~ endblock -%}
{%~ block serialize -%}
{{ parent()|ident(8) }}
{%~ endblock -%}
{%~ block deserialize -%}
{{ parent()|ident(8) }}
{%- endblock %}
}
}
Et en sortie:
Cliquez pour révéler
Cliquez pour masquer
C'est beau non?
Lien: GitHub
Amusez-vous bien ! Je reste disponible en cas de question.