Categorygithub.com/drewstone/go2rs
repositorypackage
0.1.4
Repository: https://github.com/drewstone/go2rs.git
Documentation: pkg.go.dev

# Packages

No description provided by the author
No description provided by the author

# README

go2rs

PkgGoDev

What is go2rs?

  • go2rs is a Rust struct generator from Go structs
  • Automatically recognizes Go modules in the directory and generates equivalent Rust types
  • Handles Go-to-Rust type conversions with appropriate derives and attributes

Installation

$ go get github.com/drewstone/go2rs

Usage

// ./example/main.go
package main

import (
    "time"
)

type Status string

const (
    StatusOK Status = "OK"
    StatusFailure Status = "Failure"
)

type Param struct {
    Status    Status
    Version   int
    Action    string
    CreatedAt time.Time
}
$ go2rs ./example

Generates:

use serde::{Deserialize, Serialize};
use chrono::{DateTime, Utc};

#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "PascalCase")]
pub enum Status {
    OK,
    Failure,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "PascalCase")]
pub struct Param {
    pub status: Status,
    pub version: i32,
    pub action: String,
    #[serde(with = "chrono::serde::ts_seconds")]
    pub created_at: DateTime<Utc>,
}

Features

  • Converts Go types to idiomatic Rust types
  • Handles common Go patterns like string enums
  • Adds appropriate serde derives and attributes
  • Supports time.Time conversion to chrono::DateTime
  • Maintains field visibility and naming conventions
  • Generates documentation from Go comments

TODO

  • Handle custom MarshalJSON/UnmarshalJSON implementations

Acknowledgements

This is entirely built using go2ts by go-generalize as a reference and porting over the same concepts to Rust.

License

This project is licensed under the MIT License - see the LICENSE file for details.