001/* 002 * Copyright 2024-2026 Revetware LLC. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 017package com.soklet.servlet.jakarta; 018 019import org.jspecify.annotations.NonNull; 020import org.jspecify.annotations.Nullable; 021 022import java.util.Locale; 023 024import static java.util.Objects.requireNonNull; 025 026/** 027 * The set of all possible event payloads emittable by {@link SokletServletPrintWriter}. 028 * 029 * @author <a href="https://www.revetkn.com">Mark Allen</a> 030 */ 031public sealed interface SokletServletPrintWriterEvent permits 032 SokletServletPrintWriterEvent.CharsWritten, 033 SokletServletPrintWriterEvent.CharWritten, 034 SokletServletPrintWriterEvent.StringWritten, 035 SokletServletPrintWriterEvent.ValuePrinted, 036 SokletServletPrintWriterEvent.ValueWithNewlinePrinted, 037 SokletServletPrintWriterEvent.NewlinePrinted, 038 SokletServletPrintWriterEvent.PrintfPerformed, 039 SokletServletPrintWriterEvent.FormatPerformed, 040 SokletServletPrintWriterEvent.CharSequenceAppended, 041 SokletServletPrintWriterEvent.CharAppended { 042 043 /** 044 * Event emitted when a {@code char[]} is written to the {@link SokletServletPrintWriter}. 045 */ 046 record CharsWritten( 047 @NonNull char[] chars, 048 int offset, 049 int length 050 ) implements SokletServletPrintWriterEvent { 051 public CharsWritten { 052 requireNonNull(chars); 053 } 054 } 055 056 /** 057 * Event emitted when an {@code int} (character) is written to the {@link SokletServletPrintWriter}. 058 */ 059 record CharWritten( 060 int ch 061 ) implements SokletServletPrintWriterEvent {} 062 063 /** 064 * Event emitted when a {@link String} is written to the {@link SokletServletPrintWriter}. 065 */ 066 record StringWritten( 067 @NonNull String string, 068 int offset, 069 int length 070 ) implements SokletServletPrintWriterEvent { 071 public StringWritten { 072 requireNonNull(string); 073 } 074 } 075 076 /** 077 * Event emitted when an {@link Object} value is written to the {@link SokletServletPrintWriter}. 078 */ 079 record ValuePrinted( 080 @Nullable Object value 081 ) implements SokletServletPrintWriterEvent {} 082 083 /** 084 * Event emitted when an {@link Object} value with a newline is written to the {@link SokletServletPrintWriter}. 085 */ 086 record ValueWithNewlinePrinted( 087 @Nullable Object value 088 ) implements SokletServletPrintWriterEvent {} 089 090 /** 091 * Event emitted when a newline is written to the {@link SokletServletPrintWriter}. 092 */ 093 record NewlinePrinted() implements SokletServletPrintWriterEvent {} 094 095 /** 096 * Event emitted when the result of a "printf" operation is written to the {@link SokletServletPrintWriter}. 097 */ 098 record PrintfPerformed( 099 @Nullable Locale locale, 100 @NonNull String format, 101 @Nullable Object @NonNull [] args 102 ) implements SokletServletPrintWriterEvent { 103 public PrintfPerformed { 104 requireNonNull(format); 105 requireNonNull(args); 106 } 107 } 108 109 /** 110 * Event emitted when the result of a "format" operation is written to the {@link SokletServletPrintWriter}. 111 */ 112 record FormatPerformed( 113 @Nullable Locale locale, 114 @NonNull String format, 115 @Nullable Object @NonNull [] args 116 ) implements SokletServletPrintWriterEvent { 117 public FormatPerformed { 118 requireNonNull(format); 119 requireNonNull(args); 120 } 121 } 122 123 /** 124 * Event emitted when a {@link CharSequence} is appended to the {@link SokletServletPrintWriter}. 125 */ 126 record CharSequenceAppended( 127 @NonNull CharSequence charSequence, 128 int start, 129 int end 130 ) implements SokletServletPrintWriterEvent { 131 public CharSequenceAppended { 132 requireNonNull(charSequence); 133 } 134 } 135 136 /** 137 * Event emitted when a {@code char} is appended to the {@link SokletServletPrintWriter}. 138 */ 139 record CharAppended( 140 char ch 141 ) implements SokletServletPrintWriterEvent { 142 public CharAppended {} 143 } 144}