{"id":1518,"date":"2019-11-16T22:43:23","date_gmt":"2019-11-16T22:43:23","guid":{"rendered":"https:\/\/docs.sisus.co\/power-inspector\/?p=1518"},"modified":"2021-03-24T17:53:53","modified_gmt":"2021-03-24T17:53:53","slug":"valuevalidator","status":"publish","type":"post","link":"https:\/\/docs.sisus.co\/power-inspector\/attributes\/valuevalidator\/","title":{"rendered":"ValueValidator"},"content":{"rendered":"<p>Base class for attributes that can be used to override the default data validation logic for the target.<br \/>\nImplements IValueValidator and ITargetableAttribute interfaces.<\/p>\n<h2>Attribute Target<\/h2>\n<p>Field, property, indexer, method return value or method parameter.<\/p>\n<h2>Example<\/h2>\n<pre>using System;\r\nusing System.Collections.Generic;\r\n\r\nusing System;\r\nusing UnityEngine;\r\n\r\nnamespace Sisus.Attributes\r\n{\r\n\t\/\/\/ &lt;summary&gt;\r\n\t\/\/\/ Attribute that specifies that its target should only contain number characters.\r\n\t\/\/\/ \r\n\t\/\/\/ Works on any class members where value implements IEnumerable&lt;char&gt;.\r\n\t\/\/\/ This includes things like string and char[].\r\n\t\/\/\/ \r\n\t\/\/\/ If value can't be cast to IEnumerable&lt;char&gt; then validation will return false.\r\n\t\/\/\/ &lt;\/summary&gt;\r\n\t[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.Method | AttributeTargets.ReturnValue | AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)]\r\n\tpublic class PrimeNumberAttribute : ValueValidatorAttribute\r\n\t{\r\n\t\tpublic PrimeNumberAttribute() : base(Target.Members) { }\r\n\r\n\t\t\/\/\/ &lt;inheritdoc\/&gt;\r\n\t\tpublic override bool Validate(object value)\r\n\t\t{\r\n\t\t\t#if DEV_MODE\r\n\t\t\tDebug.Log(\"Validate: \"+value);\r\n\t\t\t#endif\r\n\r\n\t\t\tint number = (int)value;\r\n\r\n\t\t\tif(number &lt;= 2)\r\n\t\t\t{\r\n\t\t\t\treturn number == 2;\r\n\t\t\t}\r\n\r\n\t\t\tif(number % 2 == 0)\r\n\t\t\t{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tfor(int i = 3, stop = (int)Mathf.Floor(Mathf.Sqrt(number)); i &lt;= stop; i += 2)\r\n\t\t\t{\r\n\t\t\t\tif(number % i == 0)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\t}\r\n}<\/pre>\n<pre>using UnityEngine;\r\nusing Sisus.Attributes;\r\n\r\nnamespace Sisus.Testing\r\n{\r\n\tpublic class PrimeNumberDetector : MonoBehaviour\r\n\t{\r\n\t\t[PrimeNumber]\r\n\t\tpublic int input = 2; \/\/tinted red if not a prime number\r\n\t}\r\n}<\/pre>\n<h2>Example Result<\/h2>\n<p><img loading=\"lazy\" class=\"alignnone size-full wp-image-1519\" src=\"https:\/\/docs.sisus.co\/power-inspector\/wp-content\/uploads\/2019\/11\/inspector-custom-value-validator.png\" alt=\"\" width=\"736\" height=\"44\" srcset=\"https:\/\/docs.sisus.co\/power-inspector\/wp-content\/uploads\/sites\/2\/2019\/11\/inspector-custom-value-validator.png 736w, https:\/\/docs.sisus.co\/power-inspector\/wp-content\/uploads\/sites\/2\/2019\/11\/inspector-custom-value-validator-300x18.png 300w\" sizes=\"(max-width: 736px) 100vw, 736px\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Base class for attributes that can be used to override the default data validation logic for the target. Implements IValueValidator and ITargetableAttribute interfaces. Attribute Target Field, property, indexer, method return value or method parameter. Example using System; using System.Collections.Generic; using System; using UnityEngine; namespace Sisus.Attributes { \/\/\/ &lt;summary&gt; \/\/\/ Attribute that specifies that its target ..<\/p>\n<div class=\"clear-fix\"><\/div>\n<p><a href=\"https:\/\/docs.sisus.co\/power-inspector\/attributes\/valuevalidator\/\" title=\"read more\">Read more<\/a><\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[26],"tags":[],"_links":{"self":[{"href":"https:\/\/docs.sisus.co\/power-inspector\/wp-json\/wp\/v2\/posts\/1518"}],"collection":[{"href":"https:\/\/docs.sisus.co\/power-inspector\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/docs.sisus.co\/power-inspector\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/docs.sisus.co\/power-inspector\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/docs.sisus.co\/power-inspector\/wp-json\/wp\/v2\/comments?post=1518"}],"version-history":[{"count":2,"href":"https:\/\/docs.sisus.co\/power-inspector\/wp-json\/wp\/v2\/posts\/1518\/revisions"}],"predecessor-version":[{"id":1846,"href":"https:\/\/docs.sisus.co\/power-inspector\/wp-json\/wp\/v2\/posts\/1518\/revisions\/1846"}],"wp:attachment":[{"href":"https:\/\/docs.sisus.co\/power-inspector\/wp-json\/wp\/v2\/media?parent=1518"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/docs.sisus.co\/power-inspector\/wp-json\/wp\/v2\/categories?post=1518"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/docs.sisus.co\/power-inspector\/wp-json\/wp\/v2\/tags?post=1518"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}