/*******************************************************************************
* Copyright (c) 2016 Bruno Medeiros and other Contributors.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Bruno Medeiros - initial API and implementation
*******************************************************************************/
package com.github.rustdt.tooling;
import static melnorme.utilbox.core.Assert.AssertNamespace.assertNotNull;
import static melnorme.utilbox.core.CoreUtil.areEqual;
import java.text.MessageFormat;
import melnorme.utilbox.collections.Indexable;
import melnorme.utilbox.misc.HashcodeUtil;
import melnorme.utilbox.misc.StringUtil;
public class CargoMessage {
public static class CargoMessageTarget {
protected final CargoMessageTargetData messageTargetData;
public CargoMessageTarget(Indexable<String> kind, String name, String path) {
this(new CargoMessageTargetData(kind, name, path));
}
public CargoMessageTarget(CargoMessageTargetData cargoMessageTargetData) {
this.messageTargetData = assertNotNull(cargoMessageTargetData);
assertNotNull(cargoMessageTargetData.kind);
assertNotNull(cargoMessageTargetData.name);
assertNotNull(cargoMessageTargetData.path);
}
@Override
public boolean equals(Object obj) {
if(this == obj) return true;
if(!(obj instanceof CargoMessageTarget)) return false;
CargoMessageTarget other = (CargoMessageTarget) obj;
return areEqual(messageTargetData, other.messageTargetData);
}
@Override
public int hashCode() {
return HashcodeUtil.combinedHashCode(messageTargetData);
}
@Override
public String toString() {
return messageTargetData.toString();
}
}
public static class CargoMessageTargetData {
public Indexable<String> kind;
public String name;
public String path;
public CargoMessageTargetData(Indexable<String> kind, String name, String path) {
this.kind = kind;
this.name = name;
this.path = path;
}
@Override
public boolean equals(Object obj) {
if(this == obj) return true;
if(!(obj instanceof CargoMessageTargetData)) return false;
CargoMessageTargetData other = (CargoMessageTargetData) obj;
return
areEqual(kind, other.kind) &&
areEqual(name, other.name) &&
areEqual(path, other.path)
;
}
@Override
public int hashCode() {
return HashcodeUtil.combinedHashCode(kind, name, path);
}
@Override
public String toString() {
return MessageFormat.format(
"[ kind: {0}, name: {1}, path: {2} ]",
StringUtil.collToString(this.kind, ","),
this.name,
this.path
);
}
}
/* ----------------- ----------------- */
protected final String reason;
protected final String packageId;
protected final CargoMessageTarget target;
protected final RustMainMessage message;
public CargoMessage(String reason, String packageId, CargoMessageTarget target, RustMainMessage message) {
super();
this.reason = StringUtil.nullAsEmpty(reason);
this.packageId = assertNotNull(packageId);
this.target = assertNotNull(target);
this.message = assertNotNull(message);
}
@Override
public boolean equals(Object obj) {
if(this == obj) return true;
if(!(obj instanceof CargoMessage)) return false;
CargoMessage other = (CargoMessage) obj;
return
areEqual(reason, other.reason) &&
areEqual(packageId, other.packageId) &&
areEqual(target, other.target) &&
areEqual(message, other.message)
;
}
@Override
public int hashCode() {
return HashcodeUtil.combinedHashCode(reason, packageId, target, message);
}
@Override
public String toString() {
return MessageFormat.format(
"[ REASON: {0}, PACKAGE_ID: {1}, TARGET: {2}, RUST_MESSAGE... ]",
this.reason,
this.packageId,
this.target
);
}
}