// Code generated by gobind. DO NOT EDIT.

// Java class io.nekohasekai.libbox.OutboundGroup is a proxy for talking to a Go program.
//
//   autogenerated by gobind -lang=java -javapkg=io.nekohasekai github.com/sagernet/sing-box/experimental/libbox
package io.nekohasekai.libbox;

import go.Seq;

public final class OutboundGroup implements Seq.Proxy {
	static { Libbox.touch(); }
	
	public final int refnum;
	
	@Override public final int incRefnum() {
	      Seq.incGoRef(refnum, this);
	      return refnum;
	}
	
	OutboundGroup(int refnum) { this.refnum = refnum; Seq.trackGoRef(refnum, this); }
	
	public OutboundGroup() { this.refnum = __New(); Seq.trackGoRef(refnum, this); }
	
	private static native int __New();
	
	public final native String getTag();
	public final native void setTag(String v);
	
	public final native String getType();
	public final native void setType(String v);
	
	public final native boolean getSelectable();
	public final native void setSelectable(boolean v);
	
	public final native String getSelected();
	public final native void setSelected(String v);
	
	public final native boolean getIsExpand();
	public final native void setIsExpand(boolean v);
	
	public native OutboundGroupItemIterator getItems();
	@Override public boolean equals(Object o) {
		if (o == null || !(o instanceof OutboundGroup)) {
		    return false;
		}
		OutboundGroup that = (OutboundGroup)o;
		String thisTag = getTag();
		String thatTag = that.getTag();
		if (thisTag == null) {
			if (thatTag != null) {
			    return false;
			}
		} else if (!thisTag.equals(thatTag)) {
		    return false;
		}
		String thisType = getType();
		String thatType = that.getType();
		if (thisType == null) {
			if (thatType != null) {
			    return false;
			}
		} else if (!thisType.equals(thatType)) {
		    return false;
		}
		boolean thisSelectable = getSelectable();
		boolean thatSelectable = that.getSelectable();
		if (thisSelectable != thatSelectable) {
		    return false;
		}
		String thisSelected = getSelected();
		String thatSelected = that.getSelected();
		if (thisSelected == null) {
			if (thatSelected != null) {
			    return false;
			}
		} else if (!thisSelected.equals(thatSelected)) {
		    return false;
		}
		boolean thisIsExpand = getIsExpand();
		boolean thatIsExpand = that.getIsExpand();
		if (thisIsExpand != thatIsExpand) {
		    return false;
		}
		return true;
	}
	
	@Override public int hashCode() {
	    return java.util.Arrays.hashCode(new Object[] {getTag(), getType(), getSelectable(), getSelected(), getIsExpand()});
	}
	
	@Override public String toString() {
		StringBuilder b = new StringBuilder();
		b.append("OutboundGroup").append("{");
		b.append("Tag:").append(getTag()).append(",");
		b.append("Type:").append(getType()).append(",");
		b.append("Selectable:").append(getSelectable()).append(",");
		b.append("Selected:").append(getSelected()).append(",");
		b.append("IsExpand:").append(getIsExpand()).append(",");
		return b.append("}").toString();
	}
}

