// 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 int refnum;
        
        @Override public final int incRefnum() {
              Seq.incGoRef(refnum, this);
              return refnum;
        }
        
        proxyParsable(int refnum) { this.refnum = refnum; Seq.trackGoRef(refnum, this); }
        
        public native String fromJSON(String jstr);
        public native String toJSON() throws Exception;
    }
    
    
}
