// Java class issue12403.Parsable is a proxy for talking to a Go program.
//   gobind -lang=java issue12403
//
// File is generated by gobind. Do not edit.
package issue12403;

import go.Seq;

public interface Parsable {
    public String fromJSON(String jstr);
    public String toJSON() throws Exception;
    
}

// Java class issue12403.Issue12403 is a proxy for talking to a Go program.
//   gobind -lang=java issue12403
//
// File is generated by gobind. Do not edit.
package issue12403;

import go.Seq;

public abstract class Issue12403 {
    static {
        Seq.touch(); // for loading the native library
        _init();
    }
    
    private Issue12403() {} // uninstantiable
    
    // touch is called from other bound packages to initialize this package
    public static void touch() {}
    
    private static native void _init();
    
    private static final class proxyParsable implements Seq.Proxy, Parsable {
        private final Seq.Ref ref;
        
        @Override public final int incRefnum() {
              int refnum = ref.refnum;
              Seq.incGoRef(refnum);
              return refnum;
        }
        
        proxyParsable(Seq.Ref ref) { this.ref = ref; }
        
        public native String fromJSON(String jstr);
        public native String toJSON() throws Exception;
    }
    
    
}
