mikhailemv

Untitled

May 17th, 2023
763
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.12 KB | None | 0 0
  1. using System;
  2. using System.Linq;
  3. using System.Reflection;
  4. using System.Collections;
  5. using System.Collections.Generic;
  6.  
  7. namespace Documentation
  8. {
  9.     public class Specifier<T> : ISpecifier
  10.     {
  11.         private Type type = typeof(T);
  12.         public string GetApiDescription()
  13.         {
  14.             return type
  15.             .GetCustomAttributes(false)
  16.             .OfType<ApiDescriptionAttribute>()
  17.             .FirstOrDefault()?.Description;
  18.         }
  19.  
  20.         public string[] GetApiMethodNames()
  21.         {
  22.             return type.GetMethods()
  23.             .Where(x => x.GetCustomAttributes<ApiMethodAttribute>()
  24.             .Any())
  25.             .Select(y => y.Name).ToArray();
  26.         }
  27.  
  28.         public string GetApiMethodDescription(string methodName)
  29.         {
  30.             return type
  31.             .GetMethod(methodName)?
  32.             .GetCustomAttributes(false)
  33.             .OfType<ApiDescriptionAttribute>()
  34.             .FirstOrDefault()?.Description;
  35.         }
  36.  
  37.         public string[] GetApiMethodParamNames(string methodName)
  38.         {
  39.             return type
  40.             .GetMethod(methodName)?
  41.             .GetParameters()
  42.             .Select(x => x.Name)
  43.             .ToArray();
  44.         }
  45.  
  46.         public string GetApiMethodParamDescription(string methodName, string paramName)
  47.         {
  48.             return type
  49.             .GetMethod(methodName)?
  50.             .GetParameters()
  51.             .Where(x => x.Name == paramName)
  52.             .FirstOrDefault()?
  53.             .GetCustomAttributes(false)
  54.             .OfType<ApiDescriptionAttribute>()
  55.             .FirstOrDefault()?
  56.             .Description;
  57.         }
  58.  
  59.         public ApiParamDescription GetApiMethodParamFullDescription(string methodName, string paramName)
  60.         {
  61.             var allResults = new ApiParamDescription();
  62.             var aid = paramName;
  63.  
  64.             AssistentForWork(paramName, methodName, allResults, aid);
  65.             allResults.ParamDescription = new CommonDescription(
  66.                 paramName, GetApiMethodParamDescription(methodName, paramName));
  67.  
  68.             return allResults;
  69.         }
  70.  
  71.         public ApiMethodDescription GetApiMethodFullDescription(string methodName)
  72.         {
  73.             var met = type.GetMethod(methodName);
  74.             var result = new ApiMethodDescription();
  75.             var paramDescription = new ApiParamDescription
  76.             { ParamDescription = new CommonDescription() };
  77.             var validAttr = met?.ReturnParameter?
  78.             .GetCustomAttributes(false)
  79.             .OfType<ApiIntValidationAttribute>()
  80.             .FirstOrDefault();
  81.             var reqAttr = met?
  82.             .ReturnParameter?
  83.             .GetCustomAttributes(false)
  84.             .OfType<ApiRequiredAttribute>()
  85.             .FirstOrDefault();
  86.             if (met != null && !met
  87.                 .GetCustomAttributes(false)
  88.                 .OfType<ApiMethodAttribute>()
  89.                 .Any()) return null;
  90.             result = GetDescriptionAssist(methodName, methodName.Trim(),
  91.                 paramDescription, validAttr, reqAttr);
  92.             return result;
  93.         }
  94.  
  95.         private void AssistentForWork(string param, string method, ApiParamDescription result, string assist)
  96.         {
  97.             var allInf = type.GetMethods()
  98.             .FirstOrDefault(x => x.Name == method)?
  99.             .GetParameters()
  100.             .FirstOrDefault(y => y.Name == param);
  101.  
  102.             var validAttr = allInf?.GetCustomAttributes(false)
  103.             .OfType<ApiIntValidationAttribute>()
  104.             .FirstOrDefault();
  105.  
  106.             var reqAttr = allInf?.GetCustomAttributes(false)
  107.             .OfType<ApiRequiredAttribute>()
  108.             .FirstOrDefault();
  109.  
  110.             if (reqAttr != null && assist != null)
  111.                 result.Required = reqAttr.Required;
  112.  
  113.             if (validAttr != null && assist != null)
  114.             {
  115.                 result.MaxValue = validAttr.MaxValue;
  116.                 result.MinValue = validAttr.MinValue;
  117.             }
  118.         }
  119.  
  120.         private ApiMethodDescription GetDescriptionAssist
  121.         (string methodName, string assist,
  122.         ApiParamDescription paramDescr, ApiIntValidationAttribute validAttr, ApiRequiredAttribute reqAttr)
  123.         {
  124.             var result = new ApiMethodDescription();
  125.             if (assist != null)
  126.                 result = new ApiMethodDescription
  127.                 {
  128.                     MethodDescription = new CommonDescription(methodName,
  129.                     GetApiMethodDescription(methodName)),
  130.                     ParamDescriptions = GetApiMethodParamNames(methodName)
  131.                     .Select(x => GetApiMethodParamFullDescription(methodName, x))
  132.                     .ToArray()
  133.                 };
  134.             if (validAttr != null && assist != null)
  135.             {
  136.                 paramDescr.MaxValue = validAttr.MaxValue;
  137.                 paramDescr.MinValue = validAttr.MinValue;
  138.             }
  139.             if (assist != null && reqAttr != null)
  140.             {
  141.                 paramDescr.Required = reqAttr.Required;
  142.                 result.ReturnDescription = paramDescr;
  143.             }
  144.             return result;
  145.         }
  146.     }
  147. }
Advertisement
Add Comment
Please, Sign In to add comment