Доработан модуль конфигурации, включающий исключения при возникновении ошибок
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