Доработан модуль конфигурации, включающий исключения при возникновении ошибок
This commit is contained in:
		
							parent
							
								
									309a47ea3a
								
							
						
					
					
						commit
						f1d1bce20b
					
				
					 3 changed files with 111 additions and 0 deletions
				
			
		
							
								
								
									
										93
									
								
								source/snapd/config/config.d
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								source/snapd/config/config.d
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,93 @@
 | 
			
		|||
module snapd.config.config;
 | 
			
		||||
 | 
			
		||||
import std.json;
 | 
			
		||||
import std.file;
 | 
			
		||||
import std.path;
 | 
			
		||||
import std.regex;
 | 
			
		||||
import std.string;
 | 
			
		||||
 | 
			
		||||
import snapd.config.exception;
 | 
			
		||||
 | 
			
		||||
class SnapdConfig {
 | 
			
		||||
	private string _git;
 | 
			
		||||
	private string _project;
 | 
			
		||||
	private string _email;
 | 
			
		||||
 | 
			
		||||
	private bool isValidEmail(string email) {
 | 
			
		||||
		auto emailPattern = ctRegex!r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$";
 | 
			
		||||
		return !matchFirst(email, emailPattern).empty;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	this(string configFile) {
 | 
			
		||||
		string jsonText;
 | 
			
		||||
		JSONValue jsonData;
 | 
			
		||||
 | 
			
		||||
		try {
 | 
			
		||||
			jsonText = readText(configFile);
 | 
			
		||||
			jsonData = parseJSON(jsonText);
 | 
			
		||||
		} catch (Exception e) {
 | 
			
		||||
			throw new SnapdConfigException(
 | 
			
		||||
				"An error occurred while reading the configuration file:\n\t"
 | 
			
		||||
				~ e.msg
 | 
			
		||||
			);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if ("git" !in jsonData)
 | 
			
		||||
			throw new SnapdConfigException(
 | 
			
		||||
				"The configuration file is missing the \"git\" parameter"
 | 
			
		||||
			);
 | 
			
		||||
 | 
			
		||||
		_git = jsonData["git"].str;
 | 
			
		||||
 | 
			
		||||
		if (!_git.length)
 | 
			
		||||
			throw new SnapdConfigException(
 | 
			
		||||
				"The \"git\" parameter must contain the path to the directory"
 | 
			
		||||
			);
 | 
			
		||||
 | 
			
		||||
		if (!_git.isAbsolute)
 | 
			
		||||
			throw new SnapdConfigException(
 | 
			
		||||
				"The \"git\" parameter must be an absolute path to the directory:\n\t"
 | 
			
		||||
				~ _git
 | 
			
		||||
			);
 | 
			
		||||
 | 
			
		||||
		if ("project" !in jsonData)
 | 
			
		||||
			throw new SnapdConfigException(
 | 
			
		||||
				"The configuration file is missing the \"project\" parameter"
 | 
			
		||||
			);
 | 
			
		||||
 | 
			
		||||
		_project = jsonData["project"].str;
 | 
			
		||||
 | 
			
		||||
		if (!_project.length)
 | 
			
		||||
			throw new SnapdConfigException(
 | 
			
		||||
				"The \"project\" parameter must contain the path to the directory"
 | 
			
		||||
			);
 | 
			
		||||
 | 
			
		||||
		if (!_project.isAbsolute)
 | 
			
		||||
			throw new SnapdConfigException(
 | 
			
		||||
				"The \"project\" parameter must be an absolute path to the directory:\n\t"
 | 
			
		||||
				~ _project
 | 
			
		||||
			);
 | 
			
		||||
 | 
			
		||||
		if ("email" !in jsonData)
 | 
			
		||||
			throw new SnapdConfigException(
 | 
			
		||||
				"The configuration file is missing the \"email\" parameter"
 | 
			
		||||
			);
 | 
			
		||||
 | 
			
		||||
		_email = jsonData["email"].str;
 | 
			
		||||
 | 
			
		||||
		if (!_email.length)
 | 
			
		||||
			throw new SnapdConfigException(
 | 
			
		||||
				"The \"email\" parameter must contain an email address"
 | 
			
		||||
			);
 | 
			
		||||
		
 | 
			
		||||
		if (!isValidEmail(_email))
 | 
			
		||||
			throw new SnapdConfigException(
 | 
			
		||||
				"Invalid email address provided in the \"email\" parameter:\n\t"
 | 
			
		||||
				~ _email
 | 
			
		||||
			);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@property string git() const { return _git; }
 | 
			
		||||
	@property string project() const { return _project; }
 | 
			
		||||
	@property string email() const { return _email; }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										14
									
								
								source/snapd/config/exception.d
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								source/snapd/config/exception.d
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,14 @@
 | 
			
		|||
module snapd.config.exception;
 | 
			
		||||
 | 
			
		||||
import std.exception;
 | 
			
		||||
import std.stdio : writeln;
 | 
			
		||||
 | 
			
		||||
class SnapdConfigException : Exception {
 | 
			
		||||
	this(string msg, string file = __FILE__, size_t line = __LINE__) {
 | 
			
		||||
		super(msg, file, line);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	void print() {
 | 
			
		||||
		writeln(msg);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										4
									
								
								source/snapd/config/package.d
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								source/snapd/config/package.d
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,4 @@
 | 
			
		|||
module snapd.config;
 | 
			
		||||
 | 
			
		||||
public import snapd.config.exception;
 | 
			
		||||
public import snapd.config.config;
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue