navidrome/navidrome · error

generating Rust client code for %s: %w

Error message

generating Rust client code for %s: %w

What it means

generateAllCode wraps any error from generateRustClientCode for a service with the service name. The root cause is inside Rust client generation (GenerateCapabilityRust-style failures or file writes) for that service.

Source

Thrown at plugins/cmd/ndpgen/main.go:712

		if verbose {
			fmt.Printf("Generated Rust lib.rs: %s\n", libPath)
		}
	}

	return nil
}

// generateAllCode generates all requested code for the services.
func generateAllCode(cfg *config, services []internal.Service) error {
	for _, svc := range services {
		if cfg.generateGoClient {
			if err := generateGoClientCode(svc, cfg.goOutputDir, cfg.pkgName, cfg.dryRun, cfg.verbose); err != nil {
				return fmt.Errorf("generating Go client code for %s: %w", svc.Name, err)
			}
		}
		if cfg.generateRsClient {
			if err := generateRustClientCode(svc, cfg.rustOutputDir, cfg.dryRun, cfg.verbose); err != nil {
				return fmt.Errorf("generating Rust client code for %s: %w", svc.Name, err)
			}
		}
	}

	if cfg.generateRsClient && len(services) > 0 {
		if err := generateRustLibFile(services, cfg.rustOutputDir, cfg.dryRun, cfg.verbose); err != nil {
			return fmt.Errorf("generating Rust lib.rs: %w", err)
		}
	}

	if cfg.generateGoClient && len(services) > 0 {
		if err := generateGoDocFile(services, cfg.goOutputDir, cfg.pkgName, cfg.dryRun, cfg.verbose); err != nil {
			return fmt.Errorf("generating Go doc.go: %w", err)
		}
		if err := generateGoModFile(cfg.goOutputDir, cfg.dryRun, cfg.verbose); err != nil {
			return fmt.Errorf("generating Go go.mod: %w", err)
		}
		// Generate PDK abstraction layer alongside host client code

View on GitHub (pinned to 4ed7494a32)

Solutions

  1. Read the inner wrapped error for the precise cause
  2. Check the failing service's field types against the generator's Rust mappings
  3. Verify rustOutputDir exists and is writable
  4. Re-run with --dry-run to isolate generation vs. write failures
Defensive patterns

Strategy: validation

Validate before calling

if cfg.generateRsClient {
    if st, err := os.Stat(cfg.rustOutputDir); err != nil || !st.IsDir() {
        os.MkdirAll(cfg.rustOutputDir, 0755)
    }
}

Try / catch

if err := generateRustClientCode(svc, cfg.rustOutputDir, cfg.dryRun, cfg.verbose); err != nil {
    return fmt.Errorf("generating Rust client code for %s: %w", svc.Name, err)
} // unwrap to find whether generation or the write failed

Prevention

When it happens

Trigger: cfg.generateRsClient is set and generateRustClientCode(svc, cfg.rustOutputDir, ...) returns an error — unsupported field type mapping to Rust, invalid service name in module naming, or write failure in rustOutputDir.

Common situations: Service schema uses types with no Rust equivalent; rustOutputDir is read-only or missing; name collisions between services after snake_casing module names.

Related errors


AI-assisted analysis of navidrome/navidrome@4ed7494a32 (2026-09-01). Data as JSON: /api/errors/94cc5219020bcf51. Report an issue: GitHub.