package org.rascalmpl.library.util;
import org.rascalmpl.interpreter.utils.RuntimeExceptionFactory;
import org.rascalmpl.library.experiments.Compiler.VersionInfo;
import org.rascalmpl.value.IString;
import org.rascalmpl.value.IValue;
import org.rascalmpl.value.IValueFactory;
/**
* Rascal library wrapper for Semantic Versioning (SemVer) library
*
*/
public class SemVerLib {
private final IValueFactory vf;
public SemVerLib(IValueFactory values){
super();
this.vf = values;
}
private SemVer makeSemVer(IString version){
try {
return new SemVer(version.getValue());
} catch(Exception e){
throw RuntimeExceptionFactory.illegalArgument(version, null, null);
}
}
public IValue satisfiesVersion(IString version, IString rangeSet){
try {
return vf.bool(makeSemVer(version).satisfiesVersion(rangeSet.getValue()));
} catch(Exception e){
throw RuntimeExceptionFactory.illegalArgument(rangeSet, null, null);
}
}
public IValue lessVersion(IString version1, IString version2){
return vf.bool(makeSemVer(version1).lessVersion(makeSemVer(version2)));
}
public IValue lessEqualVersion(IString version1, IString version2){
return vf.bool(makeSemVer(version1).lessEqualVersion(makeSemVer(version2)));
}
public IValue greaterVersion(IString version1, IString version2){
return vf.bool(makeSemVer(version1).greaterVersion(makeSemVer(version2)));
}
public IValue greaterEqualVersion(IString version1, IString version2){
return vf.bool(makeSemVer(version1).greaterEqualVersion(makeSemVer(version2)));
}
public IValue equalVersion(IString version1, IString version2){
return vf.bool(makeSemVer(version1).equalVersion(makeSemVer(version2)));
}
public IValue getRascalVersion(){
return vf.string(VersionInfo.RASCAL_VERSION);
}
public IValue getRascalRuntimeVersion(){
return vf.string(VersionInfo.RASCAL_RUNTIME_VERSION);
}
public IValue getRascalCompilerVersion(){
return vf.string(VersionInfo.RASCAL_COMPILER_VERSION);
}
}