diff --git a/Morpher.WebService.V3.Client/BadRequestException.cs b/Morpher.WebService.V3.Client/BadRequestException.cs index be2b382..3e8fa4b 100644 --- a/Morpher.WebService.V3.Client/BadRequestException.cs +++ b/Morpher.WebService.V3.Client/BadRequestException.cs @@ -5,10 +5,17 @@ namespace Morpher.WebService.V3 class BadRequestException : Exception { public int Status { get; } + public int ErrorCode { get; } public BadRequestException(int status) { Status = status; } + + public BadRequestException(int status, int errorCode) + { + Status = status; + ErrorCode = errorCode; + } } } \ No newline at end of file diff --git a/Morpher.WebService.V3.Client/MyWebClient.cs b/Morpher.WebService.V3.Client/MyWebClient.cs index 6bd5e46..9d10205 100644 --- a/Morpher.WebService.V3.Client/MyWebClient.cs +++ b/Morpher.WebService.V3.Client/MyWebClient.cs @@ -5,6 +5,7 @@ namespace Morpher.WebService.V3 { + using System.Collections.Generic; using System.Collections.Specialized; using Newtonsoft.Json; @@ -136,7 +137,14 @@ static void TryToThrowMorpherException(WebException exc) throw new InvalidServerResponseException(exc); } - throw new BadRequestException(status); + var jsonResponse = new StreamReader(httpWebResponse.GetResponseStream()).ReadToEnd(); + + var resp = JsonConvert.DeserializeObject>(jsonResponse); + string errorCode = ""; + if (resp.TryGetValue("code", out errorCode)) + throw new BadRequestException(status, int.Parse(errorCode)); + else + throw new BadRequestException(status); } if (status >= 500) diff --git a/Morpher.WebService.V3.Client/Russian/Client.cs b/Morpher.WebService.V3.Client/Russian/Client.cs index ffe6e34..ebf7454 100644 --- a/Morpher.WebService.V3.Client/Russian/Client.cs +++ b/Morpher.WebService.V3.Client/Russian/Client.cs @@ -153,5 +153,43 @@ public List Adjectivize(string lemma) return client.GetObject>("/russian/adjectivize"); } } + + public Propis GetPropis(decimal n, string currency, + string padeg, string capitals, string nbsp, string delim) + { + if (string.IsNullOrWhiteSpace(currency)) + { + throw new ArgumentEmptyException(nameof(currency)); + } + + using (var client = _newClient()) + { + + try + { + client.AddParam("n", n.ToString(CultureInfo.InvariantCulture)); + client.AddParam("currency", currency); + client.AddParam("case", padeg); + client.AddParam("capitals", capitals); + client.AddParam("nbsp", nbsp); + client.AddParam("delim", delim); + + return client.GetObject("/russian/propis"); + } + catch (BadRequestException e) + { + switch (e.ErrorCode) + { + case 20: throw new WrongCurrencyException(nameof(currency)); + case 21: throw new InvalidCapitalsValueException(nameof(capitals)); + case 22: throw new InvalidCaseValueException("case"); + case 23: throw new InvalidDelimValueException(nameof(delim)); + case 24: throw new InvalidNbspValueException(nameof(nbsp)); + } + + throw; + } + } + } } } \ No newline at end of file diff --git a/Morpher.WebService.V3.Client/Russian/InvalidCapitalsValueException.cs b/Morpher.WebService.V3.Client/Russian/InvalidCapitalsValueException.cs new file mode 100644 index 0000000..e5c6ced --- /dev/null +++ b/Morpher.WebService.V3.Client/Russian/InvalidCapitalsValueException.cs @@ -0,0 +1,13 @@ +namespace Morpher.WebService.V3.Russian +{ + public class InvalidCapitalsValueException : InvalidArgumentException + { + public override string Message => + "Неправильное значение параметра capitals. Допустимые значения: frist/all/none."; + + public InvalidCapitalsValueException(string parameterName) + : base(parameterName) + { + } + } +} \ No newline at end of file diff --git a/Morpher.WebService.V3.Client/Russian/InvalidCaseValueException.cs b/Morpher.WebService.V3.Client/Russian/InvalidCaseValueException.cs new file mode 100644 index 0000000..21aee5a --- /dev/null +++ b/Morpher.WebService.V3.Client/Russian/InvalidCaseValueException.cs @@ -0,0 +1,13 @@ +namespace Morpher.WebService.V3.Russian +{ + public class InvalidCaseValueException : InvalidArgumentException + { + public override string Message => + "Неправильное значение параметра case. Допустимые значения: nominative/genitive/dative/accusative/instrumental/prepositional."; + + public InvalidCaseValueException(string parameterName) + : base(parameterName) + { + } + } +} \ No newline at end of file diff --git a/Morpher.WebService.V3.Client/Russian/InvalidDelimValueException.cs b/Morpher.WebService.V3.Client/Russian/InvalidDelimValueException.cs new file mode 100644 index 0000000..835e2a4 --- /dev/null +++ b/Morpher.WebService.V3.Client/Russian/InvalidDelimValueException.cs @@ -0,0 +1,13 @@ +namespace Morpher.WebService.V3.Russian +{ + public class InvalidDelimValueException : InvalidArgumentException + { + public override string Message => + "Неправильное значение параметра delim. Допустимые значения: thinsp/space/none/comma/dot."; + + public InvalidDelimValueException(string parameterName) + : base(parameterName) + { + } + } +} \ No newline at end of file diff --git a/Morpher.WebService.V3.Client/Russian/InvalidNbspValueException.cs b/Morpher.WebService.V3.Client/Russian/InvalidNbspValueException.cs new file mode 100644 index 0000000..d9e0853 --- /dev/null +++ b/Morpher.WebService.V3.Client/Russian/InvalidNbspValueException.cs @@ -0,0 +1,13 @@ +namespace Morpher.WebService.V3.Russian +{ + public class InvalidNbspValueException : InvalidArgumentException + { + public override string Message => + "Неправильное значение параметра nbsp. Допустимые значения: all/none."; + + public InvalidNbspValueException(string parameterName) + : base(parameterName) + { + } + } +} \ No newline at end of file diff --git a/Morpher.WebService.V3.Client/Russian/Propis.cs b/Morpher.WebService.V3.Client/Russian/Propis.cs new file mode 100644 index 0000000..84269cc --- /dev/null +++ b/Morpher.WebService.V3.Client/Russian/Propis.cs @@ -0,0 +1,26 @@ +using System.Runtime.Serialization; + +namespace Morpher.WebService.V3.Russian +{ + [DataContract] + public class Propis + { + [DataMember(Name = "propis1")] + public string Propis1 { get; set; } + + [DataMember(Name = "propis2")] + public string Propis2 { get; set; } + + [DataMember(Name = "propis3")] + public string Propis3 { get; set; } + + [DataMember(Name = "amount")] + public string Amount { get; set; } + + [DataMember(Name = "currency")] + public string Currency { get; set; } + + [DataMember(Name = "cents")] + public string Cents { get; set; } + } +} \ No newline at end of file diff --git a/Morpher.WebService.V3.Client/Russian/WrongCurrencyException.cs b/Morpher.WebService.V3.Client/Russian/WrongCurrencyException.cs new file mode 100644 index 0000000..f97d896 --- /dev/null +++ b/Morpher.WebService.V3.Client/Russian/WrongCurrencyException.cs @@ -0,0 +1,13 @@ +namespace Morpher.WebService.V3.Russian +{ + public class WrongCurrencyException : InvalidArgumentException + { + public override string Message => + "Неправильное значение параметра currency."; + + public WrongCurrencyException(string parameterName) + : base(parameterName) + { + } + } +} \ No newline at end of file