Files
proxd-man/Proxd-man/ShareLink/ShareLinkParsers.cs
T

48 lines
1.4 KiB
C#

using Proxd_man.Config.Outbound;
namespace Proxd_man.ShareLink;
public class ShareLinkParser
{
private static readonly Lazy<List<IShareLinkParser>> parser = new(() => [
new ShadowSocksLinkParserV2()
]);
public static BaseOutboundSetting Parse(string shareLink)
{
foreach (var p in parser.Value.Where(p => p.CanParse(shareLink)))
{
return p.Parse(shareLink);
}
throw new InvalidShareLinkException("不支持的分享链接: " + shareLink);
}
}
public interface IShareLinkParser
{
/// <summary>
/// 检查该分享链接是否可以被该实现解析.
///
/// 该方法只需要检查是否可以解析, 并不需要检查是否正确.
/// </summary>
/// <param name="shareLink">要尝试解析的出站配置分享链接.</param>
/// <returns>如果可以被实现解析, 则返回 true.</returns>
bool CanParse(string shareLink);
/// <summary>
/// 将分享链接解析为出站配置.
/// </summary>
/// <param name="shareLink">要解析的分享链接.</param>
/// <returns>返回分享链接解析得出的出站配置.</returns>
/// <exception cref="InvalidShareLinkException">当分享链接错误导致无法解析时抛出异常.</exception>
BaseOutboundSetting Parse(string shareLink);
}
public class InvalidShareLinkException(string message, Exception? cause = null) : Exception(message, cause);