// Copyright Epic Games, Inc. All Rights Reserved.
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Net;
using System.Runtime.CompilerServices;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.Text;
using System.Threading;
using System.ComponentModel;
using System.Reflection;
using EpicGames.Core;
using System.Linq;
using Microsoft.Extensions.Logging;
namespace AutomationTool
{
///
/// Help Attribute.
///
[AttributeUsage(AttributeTargets.All, AllowMultiple = true)]
public class HelpAttribute : DescriptionAttribute
{
private bool IsParamHelp;
///
/// Basic constructor for class descriptions.
///
/// Class description
public HelpAttribute(string Description)
: base(Description)
{
IsParamHelp = false;
}
///
/// Constructor for parameter descriptions.
///
/// Paramter name
/// Paramter description
public HelpAttribute(string ParamName, string Description)
: base(FormatDescription(ParamName, Description))
{
IsParamHelp = true;
}
///
/// Additional type to display help for.
///
///
public HelpAttribute(Type AdditionalType)
{
IsParamHelp = false;
AdditionalHelp = AdditionalType;
}
private static string FormatDescription(string Name, string Description)
{
return String.Format("-{0} {1}", Name, Description);
}
public bool IsParam
{
get { return IsParamHelp; }
}
public Type AdditionalHelp
{
get;
private set;
}
}
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface, AllowMultiple = true)]
public class ParamHelpAttribute : HelpAttribute
{
public enum ParamAction
{
Store,
Store_True,
Store_False,
Append,
Override
}
private ParamHelpAttribute(string Description) : base(Description)
{
}
public ParamHelpAttribute() : this("", "")
{
// Needed for de-serialization
}
public ParamHelpAttribute(string Name, string Description) : base(Name, Description)
{
ParamName = Name.TrimStart('-');
int EqualsInParamNameIndex = ParamName.IndexOf("=");
if (EqualsInParamNameIndex > 0)
{
ParamName = ParamName.Substring(0, EqualsInParamNameIndex);
}
_Action = ParamAction.Store;
Required = false;
ParamType = typeof(string);
DefaultValue = null;
_Choices = null;
MultiSelectSeparator = null;
Deprecated = false;
}
public string ParamName
{
get;
set;
}
private string _ParamDescription = string.Empty;
public string ParamDescription
{
get
{
if (!string.IsNullOrEmpty(_ParamDescription))
{
return _ParamDescription;
}
string RequiredStr = Required ? ". Required" : ". Optional";
string ChoicesStr = "";
var ValidChoices = Choices as IEnumerable