23 lines
830 B
C#
23 lines
830 B
C#
using System;
|
|
|
|
namespace Cryville.Crtr.Browsing.Actions {
|
|
public abstract class ResourceAction<T> : IResourceAction<T> where T : IResourceMeta {
|
|
public abstract string Name { get; }
|
|
public abstract int Priority { get; }
|
|
|
|
public abstract bool CanInvoke(Uri uri, T resource);
|
|
public bool CanInvoke(Uri uri, IResourceMeta resource) {
|
|
if (resource == null) throw new ArgumentNullException("resource");
|
|
if (resource is not T res) throw new ArgumentException("Mismatched resource type.");
|
|
return CanInvoke(uri, res);
|
|
}
|
|
|
|
public abstract void Invoke(Uri uri, T resource);
|
|
public void Invoke(Uri uri, IResourceMeta resource) {
|
|
if (resource == null) throw new ArgumentNullException("resource");
|
|
if (resource is not T res) throw new ArgumentException("Mismatched resource type.");
|
|
Invoke(uri, res);
|
|
}
|
|
}
|
|
}
|